{"version":3,"sources":["webpack://BABYLONJS/loaders/src/webpack/universalModuleDefinition","webpack://BABYLONJS/loaders/src/webpack/bootstrap","webpack://BABYLONJS/node_modules/tslib/tslib.es6.js","webpack://BABYLONJS/loaders/src/(webpack)/buildin/global.js","webpack://BABYLONJS/loaders/src/OBJ/index.ts","webpack://BABYLONJS/loaders/src/OBJ/mtlFileLoader.ts","webpack://BABYLONJS/loaders/src/OBJ/objFileLoader.ts","webpack://BABYLONJS/loaders/src/STL/index.ts","webpack://BABYLONJS/loaders/src/STL/stlFileLoader.ts","webpack://BABYLONJS/loaders/src/glTF/1.0/glTFBinaryExtension.ts","webpack://BABYLONJS/loaders/src/glTF/1.0/glTFLoader.ts","webpack://BABYLONJS/loaders/src/glTF/1.0/glTFLoaderInterfaces.ts","webpack://BABYLONJS/loaders/src/glTF/1.0/glTFLoaderUtils.ts","webpack://BABYLONJS/loaders/src/glTF/1.0/glTFMaterialsCommonExtension.ts","webpack://BABYLONJS/loaders/src/glTF/1.0/index.ts","webpack://BABYLONJS/loaders/src/glTF/2.0/Extensions/EXT_lights_image_based.ts","webpack://BABYLONJS/loaders/src/glTF/2.0/Extensions/EXT_mesh_gpu_instancing.ts","webpack://BABYLONJS/loaders/src/glTF/2.0/Extensions/EXT_texture_webp.ts","webpack://BABYLONJS/loaders/src/glTF/2.0/Extensions/ExtrasAsMetadata.ts","webpack://BABYLONJS/loaders/src/glTF/2.0/Extensions/KHR_draco_mesh_compression.ts","webpack://BABYLONJS/loaders/src/glTF/2.0/Extensions/KHR_lights_punctual.ts","webpack://BABYLONJS/loaders/src/glTF/2.0/Extensions/KHR_materials_clearcoat.ts","webpack://BABYLONJS/loaders/src/glTF/2.0/Extensions/KHR_materials_ior.ts","webpack://BABYLONJS/loaders/src/glTF/2.0/Extensions/KHR_materials_pbrSpecularGlossiness.ts","webpack://BABYLONJS/loaders/src/glTF/2.0/Extensions/KHR_materials_sheen.ts","webpack://BABYLONJS/loaders/src/glTF/2.0/Extensions/KHR_materials_specular.ts","webpack://BABYLONJS/loaders/src/glTF/2.0/Extensions/KHR_materials_transmission.ts","webpack://BABYLONJS/loaders/src/glTF/2.0/Extensions/KHR_materials_unlit.ts","webpack://BABYLONJS/loaders/src/glTF/2.0/Extensions/KHR_materials_variants.ts","webpack://BABYLONJS/loaders/src/glTF/2.0/Extensions/KHR_mesh_quantization.ts","webpack://BABYLONJS/loaders/src/glTF/2.0/Extensions/KHR_texture_basisu.ts","webpack://BABYLONJS/loaders/src/glTF/2.0/Extensions/KHR_texture_transform.ts","webpack://BABYLONJS/loaders/src/glTF/2.0/Extensions/KHR_xmp.ts","webpack://BABYLONJS/loaders/src/glTF/2.0/Extensions/MSFT_audio_emitter.ts","webpack://BABYLONJS/loaders/src/glTF/2.0/Extensions/MSFT_lod.ts","webpack://BABYLONJS/loaders/src/glTF/2.0/Extensions/MSFT_minecraftMesh.ts","webpack://BABYLONJS/loaders/src/glTF/2.0/Extensions/MSFT_sRGBFactors.ts","webpack://BABYLONJS/loaders/src/glTF/2.0/Extensions/index.ts","webpack://BABYLONJS/loaders/src/glTF/2.0/glTFLoader.ts","webpack://BABYLONJS/loaders/src/glTF/2.0/index.ts","webpack://BABYLONJS/loaders/src/glTF/glTFFileLoader.ts","webpack://BABYLONJS/loaders/src/glTF/glTFValidation.ts","webpack://BABYLONJS/loaders/src/glTF/index.ts","webpack://BABYLONJS/loaders/src/index.ts","webpack://BABYLONJS/loaders/src/legacy/legacy-glTF.ts","webpack://BABYLONJS/loaders/src/legacy/legacy-glTF1.ts","webpack://BABYLONJS/loaders/src/legacy/legacy-glTF2.ts","webpack://BABYLONJS/loaders/src/legacy/legacy-objFileLoader.ts","webpack://BABYLONJS/loaders/src/legacy/legacy-stlFileLoader.ts","webpack://BABYLONJS/loaders/src/legacy/legacy.ts","webpack://BABYLONJS/loaders/src/external {\"root\":\"BABYLON\",\"commonjs\":\"babylonjs\",\"commonjs2\":\"babylonjs\",\"amd\":\"babylonjs\"}"],"names":[],"mappings":"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","file":"babylonjs.loaders.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"babylonjs\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"babylonjs-loaders\", [\"babylonjs\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"babylonjs-loaders\"] = factory(require(\"babylonjs\"));\n\telse\n\t\troot[\"LOADERS\"] = factory(root[\"BABYLON\"]);\n})((typeof self !== \"undefined\" ? self : typeof global !== \"undefined\" ? global : this), function(__WEBPACK_EXTERNAL_MODULE_babylonjs_Misc_tools__) {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./legacy/legacy.ts\");\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","export * from \"./mtlFileLoader\";\r\nexport * from \"./objFileLoader\";","import { Nullable } from \"babylonjs/types\";\r\nimport { Color3 } from 'babylonjs/Maths/math.color';\r\nimport { Texture } from \"babylonjs/Materials/Textures/texture\";\r\nimport { StandardMaterial } from \"babylonjs/Materials/standardMaterial\";\r\n\r\nimport { Scene } from \"babylonjs/scene\";\r\n/**\r\n * Class reading and parsing the MTL file bundled with the obj file.\r\n */\r\nexport class MTLFileLoader {\r\n /**\r\n * Invert Y-Axis of referenced textures on load\r\n */\r\n public static INVERT_TEXTURE_Y = true;\r\n\r\n /**\r\n * All material loaded from the mtl will be set here\r\n */\r\n public materials: StandardMaterial[] = [];\r\n\r\n /**\r\n * This function will read the mtl file and create each material described inside\r\n * This function could be improve by adding :\r\n * -some component missing (Ni, Tf...)\r\n * -including the specific options available\r\n *\r\n * @param scene defines the scene the material will be created in\r\n * @param data defines the mtl data to parse\r\n * @param rootUrl defines the rooturl to use in order to load relative dependencies\r\n * @param forAssetContainer defines if the material should be registered in the scene\r\n */\r\n public parseMTL(scene: Scene, data: string | ArrayBuffer, rootUrl: string, forAssetContainer: boolean): void {\r\n if (data instanceof ArrayBuffer) {\r\n return;\r\n }\r\n\r\n //Split the lines from the file\r\n var lines = data.split('\\n');\r\n //Space char\r\n var delimiter_pattern = /\\s+/;\r\n //Array with RGB colors\r\n var color: number[];\r\n //New material\r\n var material: Nullable = null;\r\n\r\n //Look at each line\r\n for (var i = 0; i < lines.length; i++) {\r\n var line = lines[i].trim();\r\n\r\n // Blank line or comment\r\n if (line.length === 0 || line.charAt(0) === '#') {\r\n continue;\r\n }\r\n\r\n //Get the first parameter (keyword)\r\n var pos = line.indexOf(' ');\r\n var key = (pos >= 0) ? line.substring(0, pos) : line;\r\n key = key.toLowerCase();\r\n\r\n //Get the data following the key\r\n var value: string = (pos >= 0) ? line.substring(pos + 1).trim() : \"\";\r\n\r\n //This mtl keyword will create the new material\r\n if (key === \"newmtl\") {\r\n //Check if it is the first material.\r\n // Materials specifications are described after this keyword.\r\n if (material) {\r\n //Add the previous material in the material array.\r\n this.materials.push(material);\r\n }\r\n //Create a new material.\r\n // value is the name of the material read in the mtl file\r\n\r\n scene._blockEntityCollection = forAssetContainer;\r\n material = new StandardMaterial(value, scene);\r\n scene._blockEntityCollection = false;\r\n } else if (key === \"kd\" && material) {\r\n // Diffuse color (color under white light) using RGB values\r\n\r\n //value = \"r g b\"\r\n color = value.split(delimiter_pattern, 3).map(parseFloat);\r\n //color = [r,g,b]\r\n //Set tghe color into the material\r\n material.diffuseColor = Color3.FromArray(color);\r\n } else if (key === \"ka\" && material) {\r\n // Ambient color (color under shadow) using RGB values\r\n\r\n //value = \"r g b\"\r\n color = value.split(delimiter_pattern, 3).map(parseFloat);\r\n //color = [r,g,b]\r\n //Set tghe color into the material\r\n material.ambientColor = Color3.FromArray(color);\r\n } else if (key === \"ks\" && material) {\r\n // Specular color (color when light is reflected from shiny surface) using RGB values\r\n\r\n //value = \"r g b\"\r\n color = value.split(delimiter_pattern, 3).map(parseFloat);\r\n //color = [r,g,b]\r\n //Set the color into the material\r\n material.specularColor = Color3.FromArray(color);\r\n } else if (key === \"ke\" && material) {\r\n // Emissive color using RGB values\r\n color = value.split(delimiter_pattern, 3).map(parseFloat);\r\n material.emissiveColor = Color3.FromArray(color);\r\n } else if (key === \"ns\" && material) {\r\n\r\n //value = \"Integer\"\r\n material.specularPower = parseFloat(value);\r\n } else if (key === \"d\" && material) {\r\n //d is dissolve for current material. It mean alpha for BABYLON\r\n material.alpha = parseFloat(value);\r\n\r\n //Texture\r\n //This part can be improved by adding the possible options of texture\r\n } else if (key === \"map_ka\" && material) {\r\n // ambient texture map with a loaded image\r\n //We must first get the folder of the image\r\n material.ambientTexture = MTLFileLoader._getTexture(rootUrl, value, scene);\r\n } else if (key === \"map_kd\" && material) {\r\n // Diffuse texture map with a loaded image\r\n material.diffuseTexture = MTLFileLoader._getTexture(rootUrl, value, scene);\r\n } else if (key === \"map_ks\" && material) {\r\n // Specular texture map with a loaded image\r\n //We must first get the folder of the image\r\n material.specularTexture = MTLFileLoader._getTexture(rootUrl, value, scene);\r\n } else if (key === \"map_ns\") {\r\n //Specular\r\n //Specular highlight component\r\n //We must first get the folder of the image\r\n //\r\n //Not supported by BABYLON\r\n //\r\n // continue;\r\n } else if (key === \"map_bump\" && material) {\r\n //The bump texture\r\n material.bumpTexture = MTLFileLoader._getTexture(rootUrl, value, scene);\r\n } else if (key === \"map_d\" && material) {\r\n // The dissolve of the material\r\n material.opacityTexture = MTLFileLoader._getTexture(rootUrl, value, scene);\r\n\r\n //Options for illumination\r\n } else if (key === \"illum\") {\r\n //Illumination\r\n if (value === \"0\") {\r\n //That mean Kd == Kd\r\n } else if (value === \"1\") {\r\n //Color on and Ambient on\r\n } else if (value === \"2\") {\r\n //Highlight on\r\n } else if (value === \"3\") {\r\n //Reflection on and Ray trace on\r\n } else if (value === \"4\") {\r\n //Transparency: Glass on, Reflection: Ray trace on\r\n } else if (value === \"5\") {\r\n //Reflection: Fresnel on and Ray trace on\r\n } else if (value === \"6\") {\r\n //Transparency: Refraction on, Reflection: Fresnel off and Ray trace on\r\n } else if (value === \"7\") {\r\n //Transparency: Refraction on, Reflection: Fresnel on and Ray trace on\r\n } else if (value === \"8\") {\r\n //Reflection on and Ray trace off\r\n } else if (value === \"9\") {\r\n //Transparency: Glass on, Reflection: Ray trace off\r\n } else if (value === \"10\") {\r\n //Casts shadows onto invisible surfaces\r\n }\r\n } else {\r\n // console.log(\"Unhandled expression at line : \" + i +'\\n' + \"with value : \" + line);\r\n }\r\n }\r\n //At the end of the file, add the last material\r\n if (material) {\r\n this.materials.push(material);\r\n }\r\n }\r\n\r\n /**\r\n * Gets the texture for the material.\r\n *\r\n * If the material is imported from input file,\r\n * We sanitize the url to ensure it takes the textre from aside the material.\r\n *\r\n * @param rootUrl The root url to load from\r\n * @param value The value stored in the mtl\r\n * @return The Texture\r\n */\r\n private static _getTexture(rootUrl: string, value: string, scene: Scene): Nullable {\r\n if (!value) {\r\n return null;\r\n }\r\n\r\n var url = rootUrl;\r\n // Load from input file.\r\n if (rootUrl === \"file:\") {\r\n var lastDelimiter = value.lastIndexOf(\"\\\\\");\r\n if (lastDelimiter === -1) {\r\n lastDelimiter = value.lastIndexOf(\"/\");\r\n }\r\n\r\n if (lastDelimiter > -1) {\r\n url += value.substr(lastDelimiter + 1);\r\n }\r\n else {\r\n url += value;\r\n }\r\n }\r\n // Not from input file.\r\n else {\r\n url += value;\r\n }\r\n\r\n return new Texture(url, scene, false, MTLFileLoader.INVERT_TEXTURE_Y);\r\n }\r\n}\r\n","import { FloatArray, IndicesArray } from \"babylonjs/types\";\nimport { Vector3, Vector2 } from \"babylonjs/Maths/math.vector\";\nimport { Color4 } from 'babylonjs/Maths/math.color';\nimport { Tools } from \"babylonjs/Misc/tools\";\nimport { VertexData } from \"babylonjs/Meshes/mesh.vertexData\";\nimport { Geometry } from \"babylonjs/Meshes/geometry\";\nimport { AnimationGroup } from \"babylonjs/Animations/animationGroup\";\nimport { Skeleton } from \"babylonjs/Bones/skeleton\";\nimport { IParticleSystem } from \"babylonjs/Particles/IParticleSystem\";\nimport { AbstractMesh } from \"babylonjs/Meshes/abstractMesh\";\nimport { Mesh } from \"babylonjs/Meshes/mesh\";\nimport { SceneLoader, ISceneLoaderPluginAsync, ISceneLoaderProgressEvent, ISceneLoaderPluginFactory, ISceneLoaderPlugin } from \"babylonjs/Loading/sceneLoader\";\n\nimport { AssetContainer } from \"babylonjs/assetContainer\";\nimport { Scene } from \"babylonjs/scene\";\nimport { WebRequest } from 'babylonjs/Misc/webRequest';\nimport { MTLFileLoader } from './mtlFileLoader';\n\ntype MeshObject = {\n name: string;\n indices?: Array;\n positions?: Array;\n normals?: Array;\n colors?: Array;\n uvs?: Array;\n materialName: string;\n};\n\n/**\n * Options for loading OBJ/MTL files\n */\ntype MeshLoadOptions = {\n /**\n * Defines if UVs are optimized by default during load.\n */\n OptimizeWithUV: boolean,\n /**\n * Defines custom scaling of UV coordinates of loaded meshes.\n */\n UVScaling: Vector2;\n /**\n * Invert model on y-axis (does a model scaling inversion)\n */\n InvertY: boolean,\n /**\n * Invert Y-Axis of referenced textures on load\n */\n InvertTextureY: boolean;\n /**\n * Include in meshes the vertex colors available in some OBJ files. This is not part of OBJ standard.\n */\n ImportVertexColors: boolean,\n /**\n * Compute the normals for the model, even if normals are present in the file.\n */\n ComputeNormals: boolean,\n /**\n * Skip loading the materials even if defined in the OBJ file (materials are ignored).\n */\n SkipMaterials: boolean,\n /**\n * When a material fails to load OBJ loader will silently fail and onSuccess() callback will be triggered.\n */\n MaterialLoadingFailsSilently: boolean\n};\n\n/**\n * OBJ file type loader.\n * This is a babylon scene loader plugin.\n */\nexport class OBJFileLoader implements ISceneLoaderPluginAsync, ISceneLoaderPluginFactory {\n\n /**\n * Defines if UVs are optimized by default during load.\n */\n public static OPTIMIZE_WITH_UV = true;\n /**\n * Invert model on y-axis (does a model scaling inversion)\n */\n public static INVERT_Y = false;\n /**\n * Invert Y-Axis of referenced textures on load\n */\n public static get INVERT_TEXTURE_Y() {\n return MTLFileLoader.INVERT_TEXTURE_Y;\n }\n\n public static set INVERT_TEXTURE_Y(value: boolean) {\n MTLFileLoader.INVERT_TEXTURE_Y = value;\n }\n\n /**\n * Include in meshes the vertex colors available in some OBJ files. This is not part of OBJ standard.\n */\n public static IMPORT_VERTEX_COLORS = false;\n /**\n * Compute the normals for the model, even if normals are present in the file.\n */\n public static COMPUTE_NORMALS = false;\n /**\n * Defines custom scaling of UV coordinates of loaded meshes.\n */\n public static UV_SCALING = new Vector2(1, 1);\n /**\n * Skip loading the materials even if defined in the OBJ file (materials are ignored).\n */\n public static SKIP_MATERIALS = false;\n\n /**\n * When a material fails to load OBJ loader will silently fail and onSuccess() callback will be triggered.\n *\n * Defaults to true for backwards compatibility.\n */\n public static MATERIAL_LOADING_FAILS_SILENTLY = true;\n /**\n * Defines the name of the plugin.\n */\n public name = \"obj\";\n /**\n * Defines the extension the plugin is able to load.\n */\n public extensions = \".obj\";\n /** @hidden */\n public obj = /^o/;\n /** @hidden */\n public group = /^g/;\n /** @hidden */\n public mtllib = /^mtllib /;\n /** @hidden */\n public usemtl = /^usemtl /;\n /** @hidden */\n public smooth = /^s /;\n /** @hidden */\n public vertexPattern = /v(\\s+[\\d|\\.|\\+|\\-|e|E]+){3,7}/;\n // vn float float float\n /** @hidden */\n public normalPattern = /vn(\\s+[\\d|\\.|\\+|\\-|e|E]+)( +[\\d|\\.|\\+|\\-|e|E]+)( +[\\d|\\.|\\+|\\-|e|E]+)/;\n // vt float float\n /** @hidden */\n public uvPattern = /vt(\\s+[\\d|\\.|\\+|\\-|e|E]+)( +[\\d|\\.|\\+|\\-|e|E]+)/;\n // f vertex vertex vertex ...\n /** @hidden */\n public facePattern1 = /f\\s+(([\\d]{1,}[\\s]?){3,})+/;\n // f vertex/uvs vertex/uvs vertex/uvs ...\n /** @hidden */\n public facePattern2 = /f\\s+((([\\d]{1,}\\/[\\d]{1,}[\\s]?){3,})+)/;\n // f vertex/uvs/normal vertex/uvs/normal vertex/uvs/normal ...\n /** @hidden */\n public facePattern3 = /f\\s+((([\\d]{1,}\\/[\\d]{1,}\\/[\\d]{1,}[\\s]?){3,})+)/;\n // f vertex//normal vertex//normal vertex//normal ...\n /** @hidden */\n public facePattern4 = /f\\s+((([\\d]{1,}\\/\\/[\\d]{1,}[\\s]?){3,})+)/;\n // f -vertex/-uvs/-normal -vertex/-uvs/-normal -vertex/-uvs/-normal ...\n /** @hidden */\n public facePattern5 = /f\\s+(((-[\\d]{1,}\\/-[\\d]{1,}\\/-[\\d]{1,}[\\s]?){3,})+)/;\n\n private _forAssetContainer = false;\n\n private _meshLoadOptions: MeshLoadOptions;\n\n /**\n * Creates loader for .OBJ files\n *\n * @param meshLoadOptions options for loading and parsing OBJ/MTL files.\n */\n constructor(meshLoadOptions?: MeshLoadOptions) {\n this._meshLoadOptions = meshLoadOptions || OBJFileLoader.currentMeshLoadOptions;\n }\n\n private static get currentMeshLoadOptions(): MeshLoadOptions {\n return {\n ComputeNormals: OBJFileLoader.COMPUTE_NORMALS,\n ImportVertexColors: OBJFileLoader.IMPORT_VERTEX_COLORS,\n InvertY: OBJFileLoader.INVERT_Y,\n InvertTextureY: OBJFileLoader.INVERT_TEXTURE_Y,\n UVScaling: OBJFileLoader.UV_SCALING,\n MaterialLoadingFailsSilently: OBJFileLoader.MATERIAL_LOADING_FAILS_SILENTLY,\n OptimizeWithUV: OBJFileLoader.OPTIMIZE_WITH_UV,\n SkipMaterials: OBJFileLoader.SKIP_MATERIALS\n };\n }\n\n /**\n * Calls synchronously the MTL file attached to this obj.\n * Load function or importMesh function don't enable to load 2 files in the same time asynchronously.\n * Without this function materials are not displayed in the first frame (but displayed after).\n * In consequence it is impossible to get material information in your HTML file\n *\n * @param url The URL of the MTL file\n * @param rootUrl\n * @param onSuccess Callback function to be called when the MTL file is loaded\n * @private\n */\n private _loadMTL(url: string, rootUrl: string, onSuccess: (response: string | ArrayBuffer, responseUrl?: string) => any, onFailure: (pathOfFile: string, exception?: any) => void) {\n //The complete path to the mtl file\n var pathOfFile = Tools.BaseUrl + rootUrl + url;\n\n // Loads through the babylon tools to allow fileInput search.\n Tools.LoadFile(\n pathOfFile,\n onSuccess,\n undefined,\n undefined,\n false,\n (request?: WebRequest | undefined, exception?: any) => {\n onFailure(pathOfFile, exception);\n }\n );\n }\n\n /**\n * Instantiates a OBJ file loader plugin.\n * @returns the created plugin\n */\n createPlugin(): ISceneLoaderPluginAsync | ISceneLoaderPlugin {\n return new OBJFileLoader(OBJFileLoader.currentMeshLoadOptions);\n }\n\n /**\n * If the data string can be loaded directly.\n *\n * @param data string containing the file data\n * @returns if the data can be loaded directly\n */\n public canDirectLoad(data: string): boolean {\n return false;\n }\n\n /**\n * Imports one or more meshes from the loaded OBJ data and adds them to the scene\n * @param meshesNames a string or array of strings of the mesh names that should be loaded from the file\n * @param scene the scene the meshes should be added to\n * @param data the OBJ data to load\n * @param rootUrl root url to load from\n * @param onProgress event that fires when loading progress has occured\n * @param fileName Defines the name of the file to load\n * @returns a promise containg the loaded meshes, particles, skeletons and animations\n */\n public importMeshAsync(meshesNames: any, scene: Scene, data: any, rootUrl: string, onProgress?: (event: ISceneLoaderProgressEvent) => void, fileName?: string): Promise<{ meshes: AbstractMesh[], particleSystems: IParticleSystem[], skeletons: Skeleton[], animationGroups: AnimationGroup[] }> {\n //get the meshes from OBJ file\n return this._parseSolid(meshesNames, scene, data, rootUrl).then((meshes) => {\n return {\n meshes,\n particleSystems: [],\n skeletons: [],\n animationGroups: []\n };\n });\n }\n\n /**\n * Imports all objects from the loaded OBJ data and adds them to the scene\n * @param scene the scene the objects should be added to\n * @param data the OBJ data to load\n * @param rootUrl root url to load from\n * @param onProgress event that fires when loading progress has occured\n * @param fileName Defines the name of the file to load\n * @returns a promise which completes when objects have been loaded to the scene\n */\n public loadAsync(scene: Scene, data: string, rootUrl: string, onProgress?: (event: ISceneLoaderProgressEvent) => void, fileName?: string): Promise {\n //Get the 3D model\n return this.importMeshAsync(null, scene, data, rootUrl, onProgress).then(() => {\n // return void\n });\n }\n\n /**\n * Load into an asset container.\n * @param scene The scene to load into\n * @param data The data to import\n * @param rootUrl The root url for scene and resources\n * @param onProgress The callback when the load progresses\n * @param fileName Defines the name of the file to load\n * @returns The loaded asset container\n */\n public loadAssetContainerAsync(scene: Scene, data: string, rootUrl: string, onProgress?: (event: ISceneLoaderProgressEvent) => void, fileName?: string): Promise {\n this._forAssetContainer = true;\n\n return this.importMeshAsync(null, scene, data, rootUrl).then((result) => {\n var container = new AssetContainer(scene);\n result.meshes.forEach((mesh) => container.meshes.push(mesh));\n result.meshes.forEach((mesh) => {\n var material = mesh.material;\n if (material) {\n // Materials\n if (container.materials.indexOf(material) == -1) {\n container.materials.push(material);\n\n // Textures\n var textures = material.getActiveTextures();\n textures.forEach((t) => {\n if (container.textures.indexOf(t) == -1) {\n container.textures.push(t);\n }\n });\n }\n }\n });\n this._forAssetContainer = false;\n return container;\n }).catch((ex) => {\n this._forAssetContainer = false;\n throw ex;\n });\n }\n\n /**\n * Read the OBJ file and create an Array of meshes.\n * Each mesh contains all information given by the OBJ and the MTL file.\n * i.e. vertices positions and indices, optional normals values, optional UV values, optional material\n *\n * @param meshesNames\n * @param scene Scene The scene where are displayed the data\n * @param data String The content of the obj file\n * @param rootUrl String The path to the folder\n * @returns Array\n * @private\n */\n private _parseSolid(meshesNames: any, scene: Scene, data: string, rootUrl: string): Promise> {\n var positions: Array = []; //values for the positions of vertices\n var normals: Array = []; //Values for the normals\n var uvs: Array = []; //Values for the textures\n var colors: Array = [];\n var meshesFromObj: Array = []; //[mesh] Contains all the obj meshes\n var handledMesh: MeshObject; //The current mesh of meshes array\n var indicesForBabylon: Array = []; //The list of indices for VertexData\n var wrappedPositionForBabylon: Array = []; //The list of position in vectors\n var wrappedUvsForBabylon: Array = []; //Array with all value of uvs to match with the indices\n var wrappedColorsForBabylon: Array = []; // Array with all color values to match with the indices\n var wrappedNormalsForBabylon: Array = []; //Array with all value of normals to match with the indices\n var tuplePosNorm: Array<{ normals: Array; idx: Array; uv: Array }> = []; //Create a tuple with indice of Position, Normal, UV [pos, norm, uvs]\n var curPositionInIndices = 0;\n var hasMeshes: Boolean = false; //Meshes are defined in the file\n var unwrappedPositionsForBabylon: Array = []; //Value of positionForBabylon w/o Vector3() [x,y,z]\n var unwrappedColorsForBabylon: Array = []; // Value of colorForBabylon w/o Color4() [r,g,b,a]\n var unwrappedNormalsForBabylon: Array = []; //Value of normalsForBabylon w/o Vector3() [x,y,z]\n var unwrappedUVForBabylon: Array = []; //Value of uvsForBabylon w/o Vector3() [x,y,z]\n var triangles: Array = []; //Indices from new triangles coming from polygons\n var materialNameFromObj: string = \"\"; //The name of the current material\n var fileToLoad: string = \"\"; //The name of the mtlFile to load\n var materialsFromMTLFile: MTLFileLoader = new MTLFileLoader();\n var objMeshName: string = \"\"; //The name of the current obj mesh\n var increment: number = 1; //Id for meshes created by the multimaterial\n var isFirstMaterial: boolean = true;\n var grayColor = new Color4(0.5, 0.5, 0.5, 1);\n\n /**\n * Search for obj in the given array.\n * This function is called to check if a couple of data already exists in an array.\n *\n * If found, returns the index of the founded tuple index. Returns -1 if not found\n * @param arr Array<{ normals: Array, idx: Array }>\n * @param obj Array\n * @returns {boolean}\n */\n var isInArray = (arr: Array<{ normals: Array; idx: Array }>, obj: Array) => {\n if (!arr[obj[0]]) { arr[obj[0]] = { normals: [], idx: [] }; }\n var idx = arr[obj[0]].normals.indexOf(obj[1]);\n\n return idx === -1 ? -1 : arr[obj[0]].idx[idx];\n };\n var isInArrayUV = (arr: Array<{ normals: Array; idx: Array; uv: Array }>, obj: Array) => {\n if (!arr[obj[0]]) { arr[obj[0]] = { normals: [], idx: [], uv: [] }; }\n var idx = arr[obj[0]].normals.indexOf(obj[1]);\n\n if (idx != 1 && (obj[2] === arr[obj[0]].uv[idx])) {\n return arr[obj[0]].idx[idx];\n }\n return -1;\n };\n\n /**\n * This function set the data for each triangle.\n * Data are position, normals and uvs\n * If a tuple of (position, normal) is not set, add the data into the corresponding array\n * If the tuple already exist, add only their indice\n *\n * @param indicePositionFromObj Integer The index in positions array\n * @param indiceUvsFromObj Integer The index in uvs array\n * @param indiceNormalFromObj Integer The index in normals array\n * @param positionVectorFromOBJ Vector3 The value of position at index objIndice\n * @param textureVectorFromOBJ Vector3 The value of uvs\n * @param normalsVectorFromOBJ Vector3 The value of normals at index objNormale\n */\n var setData = (indicePositionFromObj: number, indiceUvsFromObj: number, indiceNormalFromObj: number, positionVectorFromOBJ: Vector3, textureVectorFromOBJ: Vector2, normalsVectorFromOBJ: Vector3, positionColorsFromOBJ?: Color4) => {\n //Check if this tuple already exists in the list of tuples\n var _index: number;\n if (this._meshLoadOptions.OptimizeWithUV) {\n _index = isInArrayUV(\n tuplePosNorm,\n [\n indicePositionFromObj,\n indiceNormalFromObj,\n indiceUvsFromObj\n ]\n );\n }\n else {\n _index = isInArray(\n tuplePosNorm,\n [\n indicePositionFromObj,\n indiceNormalFromObj\n ]\n );\n }\n\n //If it not exists\n if (_index === -1) {\n //Add an new indice.\n //The array of indices is only an array with his length equal to the number of triangles - 1.\n //We add vertices data in this order\n indicesForBabylon.push(wrappedPositionForBabylon.length);\n //Push the position of vertice for Babylon\n //Each element is a Vector3(x,y,z)\n wrappedPositionForBabylon.push(positionVectorFromOBJ);\n //Push the uvs for Babylon\n //Each element is a Vector3(u,v)\n wrappedUvsForBabylon.push(textureVectorFromOBJ);\n //Push the normals for Babylon\n //Each element is a Vector3(x,y,z)\n wrappedNormalsForBabylon.push(normalsVectorFromOBJ);\n\n if (positionColorsFromOBJ !== undefined) {\n //Push the colors for Babylon\n //Each element is a BABYLON.Color4(r,g,b,a)\n wrappedColorsForBabylon.push(positionColorsFromOBJ);\n }\n\n //Add the tuple in the comparison list\n tuplePosNorm[indicePositionFromObj].normals.push(indiceNormalFromObj);\n tuplePosNorm[indicePositionFromObj].idx.push(curPositionInIndices++);\n if (this._meshLoadOptions.OptimizeWithUV) { tuplePosNorm[indicePositionFromObj].uv.push(indiceUvsFromObj); }\n } else {\n //The tuple already exists\n //Add the index of the already existing tuple\n //At this index we can get the value of position, normal, color and uvs of vertex\n indicesForBabylon.push(_index);\n }\n };\n\n /**\n * Transform Vector() and BABYLON.Color() objects into numbers in an array\n */\n var unwrapData = () => {\n //Every array has the same length\n for (var l = 0; l < wrappedPositionForBabylon.length; l++) {\n //Push the x, y, z values of each element in the unwrapped array\n unwrappedPositionsForBabylon.push(wrappedPositionForBabylon[l].x, wrappedPositionForBabylon[l].y, wrappedPositionForBabylon[l].z);\n unwrappedNormalsForBabylon.push(wrappedNormalsForBabylon[l].x, wrappedNormalsForBabylon[l].y, wrappedNormalsForBabylon[l].z);\n unwrappedUVForBabylon.push(wrappedUvsForBabylon[l].x, wrappedUvsForBabylon[l].y); //z is an optional value not supported by BABYLON\n if (this._meshLoadOptions.ImportVertexColors === true) {\n //Push the r, g, b, a values of each element in the unwrapped array\n unwrappedColorsForBabylon.push(wrappedColorsForBabylon[l].r, wrappedColorsForBabylon[l].g, wrappedColorsForBabylon[l].b, wrappedColorsForBabylon[l].a);\n }\n }\n // Reset arrays for the next new meshes\n wrappedPositionForBabylon = [];\n wrappedNormalsForBabylon = [];\n wrappedUvsForBabylon = [];\n wrappedColorsForBabylon = [];\n tuplePosNorm = [];\n curPositionInIndices = 0;\n };\n\n /**\n * Create triangles from polygons\n * It is important to notice that a triangle is a polygon\n * We get 5 patterns of face defined in OBJ File :\n * facePattern1 = [\"1\",\"2\",\"3\",\"4\",\"5\",\"6\"]\n * facePattern2 = [\"1/1\",\"2/2\",\"3/3\",\"4/4\",\"5/5\",\"6/6\"]\n * facePattern3 = [\"1/1/1\",\"2/2/2\",\"3/3/3\",\"4/4/4\",\"5/5/5\",\"6/6/6\"]\n * facePattern4 = [\"1//1\",\"2//2\",\"3//3\",\"4//4\",\"5//5\",\"6//6\"]\n * facePattern5 = [\"-1/-1/-1\",\"-2/-2/-2\",\"-3/-3/-3\",\"-4/-4/-4\",\"-5/-5/-5\",\"-6/-6/-6\"]\n * Each pattern is divided by the same method\n * @param face Array[String] The indices of elements\n * @param v Integer The variable to increment\n */\n var getTriangles = (faces: Array, v: number) => {\n //Work for each element of the array\n for (var faceIndex = v; faceIndex < faces.length - 1; faceIndex++) {\n //Add on the triangle variable the indexes to obtain triangles\n triangles.push(faces[0], faces[faceIndex], faces[faceIndex + 1]);\n }\n\n //Result obtained after 2 iterations:\n //Pattern1 => triangle = [\"1\",\"2\",\"3\",\"1\",\"3\",\"4\"];\n //Pattern2 => triangle = [\"1/1\",\"2/2\",\"3/3\",\"1/1\",\"3/3\",\"4/4\"];\n //Pattern3 => triangle = [\"1/1/1\",\"2/2/2\",\"3/3/3\",\"1/1/1\",\"3/3/3\",\"4/4/4\"];\n //Pattern4 => triangle = [\"1//1\",\"2//2\",\"3//3\",\"1//1\",\"3//3\",\"4//4\"];\n //Pattern5 => triangle = [\"-1/-1/-1\",\"-2/-2/-2\",\"-3/-3/-3\",\"-1/-1/-1\",\"-3/-3/-3\",\"-4/-4/-4\"];\n };\n\n /**\n * Create triangles and push the data for each polygon for the pattern 1\n * In this pattern we get vertice positions\n * @param face\n * @param v\n */\n var setDataForCurrentFaceWithPattern1 = (face: Array, v: number) => {\n //Get the indices of triangles for each polygon\n getTriangles(face, v);\n //For each element in the triangles array.\n //This var could contains 1 to an infinity of triangles\n for (var k = 0; k < triangles.length; k++) {\n // Set position indice\n var indicePositionFromObj = parseInt(triangles[k]) - 1;\n\n setData(\n indicePositionFromObj,\n 0, 0, //In the pattern 1, normals and uvs are not defined\n positions[indicePositionFromObj], //Get the vectors data\n Vector2.Zero(), Vector3.Up(), //Create default vectors\n this._meshLoadOptions.ImportVertexColors === true ? colors[indicePositionFromObj] : undefined\n );\n }\n //Reset variable for the next line\n triangles = [];\n };\n\n /**\n * Create triangles and push the data for each polygon for the pattern 2\n * In this pattern we get vertice positions and uvsu\n * @param face\n * @param v\n */\n var setDataForCurrentFaceWithPattern2 = (face: Array, v: number) => {\n //Get the indices of triangles for each polygon\n getTriangles(face, v);\n for (var k = 0; k < triangles.length; k++) {\n //triangle[k] = \"1/1\"\n //Split the data for getting position and uv\n var point = triangles[k].split(\"/\"); // [\"1\", \"1\"]\n //Set position indice\n var indicePositionFromObj = parseInt(point[0]) - 1;\n //Set uv indice\n var indiceUvsFromObj = parseInt(point[1]) - 1;\n\n setData(\n indicePositionFromObj,\n indiceUvsFromObj,\n 0, //Default value for normals\n positions[indicePositionFromObj], //Get the values for each element\n uvs[indiceUvsFromObj],\n Vector3.Up(), //Default value for normals\n this._meshLoadOptions.ImportVertexColors === true ? colors[indicePositionFromObj] : undefined\n );\n }\n\n //Reset variable for the next line\n triangles = [];\n };\n\n /**\n * Create triangles and push the data for each polygon for the pattern 3\n * In this pattern we get vertice positions, uvs and normals\n * @param face\n * @param v\n */\n var setDataForCurrentFaceWithPattern3 = (face: Array, v: number) => {\n //Get the indices of triangles for each polygon\n getTriangles(face, v);\n\n for (var k = 0; k < triangles.length; k++) {\n //triangle[k] = \"1/1/1\"\n //Split the data for getting position, uv, and normals\n var point = triangles[k].split(\"/\"); // [\"1\", \"1\", \"1\"]\n // Set position indice\n var indicePositionFromObj = parseInt(point[0]) - 1;\n // Set uv indice\n var indiceUvsFromObj = parseInt(point[1]) - 1;\n // Set normal indice\n var indiceNormalFromObj = parseInt(point[2]) - 1;\n\n setData(\n indicePositionFromObj, indiceUvsFromObj, indiceNormalFromObj,\n positions[indicePositionFromObj], uvs[indiceUvsFromObj], normals[indiceNormalFromObj] //Set the vector for each component\n );\n\n }\n //Reset variable for the next line\n triangles = [];\n };\n\n /**\n * Create triangles and push the data for each polygon for the pattern 4\n * In this pattern we get vertice positions and normals\n * @param face\n * @param v\n */\n var setDataForCurrentFaceWithPattern4 = (face: Array, v: number) => {\n getTriangles(face, v);\n\n for (var k = 0; k < triangles.length; k++) {\n //triangle[k] = \"1//1\"\n //Split the data for getting position and normals\n var point = triangles[k].split(\"//\"); // [\"1\", \"1\"]\n // We check indices, and normals\n var indicePositionFromObj = parseInt(point[0]) - 1;\n var indiceNormalFromObj = parseInt(point[1]) - 1;\n\n setData(\n indicePositionFromObj,\n 1, //Default value for uv\n indiceNormalFromObj,\n positions[indicePositionFromObj], //Get each vector of data\n Vector2.Zero(),\n normals[indiceNormalFromObj],\n this._meshLoadOptions.ImportVertexColors === true ? colors[indicePositionFromObj] : undefined\n );\n }\n //Reset variable for the next line\n triangles = [];\n };\n\n /**\n * Create triangles and push the data for each polygon for the pattern 3\n * In this pattern we get vertice positions, uvs and normals\n * @param face\n * @param v\n */\n var setDataForCurrentFaceWithPattern5 = (face: Array, v: number) => {\n //Get the indices of triangles for each polygon\n getTriangles(face, v);\n\n for (var k = 0; k < triangles.length; k++) {\n //triangle[k] = \"-1/-1/-1\"\n //Split the data for getting position, uv, and normals\n var point = triangles[k].split(\"/\"); // [\"-1\", \"-1\", \"-1\"]\n // Set position indice\n var indicePositionFromObj = positions.length + parseInt(point[0]);\n // Set uv indice\n var indiceUvsFromObj = uvs.length + parseInt(point[1]);\n // Set normal indice\n var indiceNormalFromObj = normals.length + parseInt(point[2]);\n\n setData(\n indicePositionFromObj, indiceUvsFromObj, indiceNormalFromObj,\n positions[indicePositionFromObj], uvs[indiceUvsFromObj], normals[indiceNormalFromObj], //Set the vector for each component\n this._meshLoadOptions.ImportVertexColors === true ? colors[indicePositionFromObj] : undefined\n );\n\n }\n //Reset variable for the next line\n triangles = [];\n };\n\n var addPreviousObjMesh = () => {\n\n //Check if it is not the first mesh. Otherwise we don't have data.\n if (meshesFromObj.length > 0) {\n //Get the previous mesh for applying the data about the faces\n //=> in obj file, faces definition append after the name of the mesh\n handledMesh = meshesFromObj[meshesFromObj.length - 1];\n\n //Set the data into Array for the mesh\n unwrapData();\n\n // Reverse tab. Otherwise face are displayed in the wrong sens\n indicesForBabylon.reverse();\n //Set the information for the mesh\n //Slice the array to avoid rewriting because of the fact this is the same var which be rewrited\n handledMesh.indices = indicesForBabylon.slice();\n handledMesh.positions = unwrappedPositionsForBabylon.slice();\n handledMesh.normals = unwrappedNormalsForBabylon.slice();\n handledMesh.uvs = unwrappedUVForBabylon.slice();\n\n if (this._meshLoadOptions.ImportVertexColors === true) {\n handledMesh.colors = unwrappedColorsForBabylon.slice();\n }\n\n //Reset the array for the next mesh\n indicesForBabylon = [];\n unwrappedPositionsForBabylon = [];\n unwrappedColorsForBabylon = [];\n unwrappedNormalsForBabylon = [];\n unwrappedUVForBabylon = [];\n }\n };\n //Main function\n\n //Split the file into lines\n var lines = data.split('\\n');\n //Look at each line\n for (var i = 0; i < lines.length; i++) {\n var line = lines[i].trim().replace(/\\s\\s/g, \" \");\n var result;\n\n //Comment or newLine\n if (line.length === 0 || line.charAt(0) === '#') {\n continue;\n\n //Get information about one position possible for the vertices\n } else if (this.vertexPattern.test(line)) {\n result = line.match(/[^ ]+/g)!; // match will return non-null due to passing regex pattern\n\n // Value of result with line: \"v 1.0 2.0 3.0\"\n // [\"v\", \"1.0\", \"2.0\", \"3.0\"]\n // Create a Vector3 with the position x, y, z\n positions.push(new Vector3(\n parseFloat(result[1]),\n parseFloat(result[2]),\n parseFloat(result[3])\n ));\n\n if (this._meshLoadOptions.ImportVertexColors === true) {\n if (result.length >= 7) {\n // TODO: if these numbers are > 1 we can use Color4.FromInts(r,g,b,a)\n colors.push(new Color4(\n parseFloat(result[4]),\n parseFloat(result[5]),\n parseFloat(result[6]),\n (result.length === 7 || result[7] === undefined) ? 1 : parseFloat(result[7])\n ));\n } else {\n // TODO: maybe push NULL and if all are NULL to skip (and remove grayColor var).\n colors.push(grayColor);\n }\n }\n\n } else if ((result = this.normalPattern.exec(line)) !== null) {\n //Create a Vector3 with the normals x, y, z\n //Value of result\n // [\"vn 1.0 2.0 3.0\", \"1.0\", \"2.0\", \"3.0\"]\n //Add the Vector in the list of normals\n normals.push(new Vector3(\n parseFloat(result[1]),\n parseFloat(result[2]),\n parseFloat(result[3])\n ));\n\n } else if ((result = this.uvPattern.exec(line)) !== null) {\n //Create a Vector2 with the normals u, v\n //Value of result\n // [\"vt 0.1 0.2 0.3\", \"0.1\", \"0.2\"]\n //Add the Vector in the list of uvs\n uvs.push(new Vector2(\n parseFloat(result[1]) * OBJFileLoader.UV_SCALING.x,\n parseFloat(result[2]) * OBJFileLoader.UV_SCALING.y\n ));\n\n //Identify patterns of faces\n //Face could be defined in different type of pattern\n } else if ((result = this.facePattern3.exec(line)) !== null) {\n //Value of result:\n //[\"f 1/1/1 2/2/2 3/3/3\", \"1/1/1 2/2/2 3/3/3\"...]\n\n //Set the data for this face\n setDataForCurrentFaceWithPattern3(\n result[1].trim().split(\" \"), // [\"1/1/1\", \"2/2/2\", \"3/3/3\"]\n 1\n );\n\n } else if ((result = this.facePattern4.exec(line)) !== null) {\n //Value of result:\n //[\"f 1//1 2//2 3//3\", \"1//1 2//2 3//3\"...]\n\n //Set the data for this face\n setDataForCurrentFaceWithPattern4(\n result[1].trim().split(\" \"), // [\"1//1\", \"2//2\", \"3//3\"]\n 1\n );\n\n } else if ((result = this.facePattern5.exec(line)) !== null) {\n //Value of result:\n //[\"f -1/-1/-1 -2/-2/-2 -3/-3/-3\", \"-1/-1/-1 -2/-2/-2 -3/-3/-3\"...]\n\n //Set the data for this face\n setDataForCurrentFaceWithPattern5(\n result[1].trim().split(\" \"), // [\"-1/-1/-1\", \"-2/-2/-2\", \"-3/-3/-3\"]\n 1\n );\n\n } else if ((result = this.facePattern2.exec(line)) !== null) {\n //Value of result:\n //[\"f 1/1 2/2 3/3\", \"1/1 2/2 3/3\"...]\n\n //Set the data for this face\n setDataForCurrentFaceWithPattern2(\n result[1].trim().split(\" \"), // [\"1/1\", \"2/2\", \"3/3\"]\n 1\n );\n\n } else if ((result = this.facePattern1.exec(line)) !== null) {\n //Value of result\n //[\"f 1 2 3\", \"1 2 3\"...]\n\n //Set the data for this face\n setDataForCurrentFaceWithPattern1(\n result[1].trim().split(\" \"), // [\"1\", \"2\", \"3\"]\n 1\n );\n\n //Define a mesh or an object\n //Each time this keyword is analysed, create a new Object with all data for creating a babylonMesh\n } else if (this.group.test(line) || this.obj.test(line)) {\n //Create a new mesh corresponding to the name of the group.\n //Definition of the mesh\n var objMesh: MeshObject = {\n name: line.substring(2).trim(), //Set the name of the current obj mesh\n indices: undefined,\n positions: undefined,\n normals: undefined,\n uvs: undefined,\n colors: undefined,\n materialName: \"\"\n };\n addPreviousObjMesh();\n\n //Push the last mesh created with only the name\n meshesFromObj.push(objMesh);\n\n //Set this variable to indicate that now meshesFromObj has objects defined inside\n hasMeshes = true;\n isFirstMaterial = true;\n increment = 1;\n //Keyword for applying a material\n } else if (this.usemtl.test(line)) {\n //Get the name of the material\n materialNameFromObj = line.substring(7).trim();\n\n //If this new material is in the same mesh\n\n if (!isFirstMaterial || !hasMeshes) {\n //Set the data for the previous mesh\n addPreviousObjMesh();\n //Create a new mesh\n var objMesh: MeshObject =\n //Set the name of the current obj mesh\n {\n name: (objMeshName || \"mesh\") + \"_mm\" + increment.toString(), //Set the name of the current obj mesh\n indices: undefined,\n positions: undefined,\n normals: undefined,\n uvs: undefined,\n colors: undefined,\n materialName: materialNameFromObj\n };\n increment++;\n //If meshes are already defined\n meshesFromObj.push(objMesh);\n hasMeshes = true;\n }\n //Set the material name if the previous line define a mesh\n\n if (hasMeshes && isFirstMaterial) {\n //Set the material name to the previous mesh (1 material per mesh)\n meshesFromObj[meshesFromObj.length - 1].materialName = materialNameFromObj;\n isFirstMaterial = false;\n }\n //Keyword for loading the mtl file\n } else if (this.mtllib.test(line)) {\n //Get the name of mtl file\n fileToLoad = line.substring(7).trim();\n\n //Apply smoothing\n } else if (this.smooth.test(line)) {\n // smooth shading => apply smoothing\n //Today I don't know it work with babylon and with obj.\n //With the obj file an integer is set\n } else {\n //If there is another possibility\n console.log(\"Unhandled expression at line : \" + line);\n }\n }\n\n //At the end of the file, add the last mesh into the meshesFromObj array\n if (hasMeshes) {\n //Set the data for the last mesh\n handledMesh = meshesFromObj[meshesFromObj.length - 1];\n\n //Reverse indices for displaying faces in the good sense\n indicesForBabylon.reverse();\n //Get the good array\n unwrapData();\n //Set array\n handledMesh.indices = indicesForBabylon;\n handledMesh.positions = unwrappedPositionsForBabylon;\n handledMesh.normals = unwrappedNormalsForBabylon;\n handledMesh.uvs = unwrappedUVForBabylon;\n\n if (this._meshLoadOptions.ImportVertexColors === true) {\n handledMesh.colors = unwrappedColorsForBabylon;\n }\n }\n\n //If any o or g keyword found, create a mesh with a random id\n if (!hasMeshes) {\n // reverse tab of indices\n indicesForBabylon.reverse();\n //Get positions normals uvs\n unwrapData();\n //Set data for one mesh\n meshesFromObj.push({\n name: Geometry.RandomId(),\n indices: indicesForBabylon,\n positions: unwrappedPositionsForBabylon,\n colors: unwrappedColorsForBabylon,\n normals: unwrappedNormalsForBabylon,\n uvs: unwrappedUVForBabylon,\n materialName: materialNameFromObj\n });\n }\n\n //Create a Mesh list\n var babylonMeshesArray: Array = []; //The mesh for babylon\n var materialToUse = new Array();\n\n //Set data for each mesh\n for (var j = 0; j < meshesFromObj.length; j++) {\n\n //check meshesNames (stlFileLoader)\n if (meshesNames && meshesFromObj[j].name) {\n if (meshesNames instanceof Array) {\n if (meshesNames.indexOf(meshesFromObj[j].name) === -1) {\n continue;\n }\n }\n else {\n if (meshesFromObj[j].name !== meshesNames) {\n continue;\n }\n }\n }\n\n //Get the current mesh\n //Set the data with VertexBuffer for each mesh\n handledMesh = meshesFromObj[j];\n //Create a Mesh with the name of the obj mesh\n\n scene._blockEntityCollection = this._forAssetContainer;\n var babylonMesh = new Mesh(meshesFromObj[j].name, scene);\n scene._blockEntityCollection = false;\n\n //Push the name of the material to an array\n //This is indispensable for the importMesh function\n materialToUse.push(meshesFromObj[j].materialName);\n\n var vertexData: VertexData = new VertexData(); //The container for the values\n //Set the data for the babylonMesh\n vertexData.uvs = handledMesh.uvs as FloatArray;\n vertexData.indices = handledMesh.indices as IndicesArray;\n vertexData.positions = handledMesh.positions as FloatArray;\n if (this._meshLoadOptions.ComputeNormals === true) {\n let normals: Array = new Array();\n VertexData.ComputeNormals(handledMesh.positions, handledMesh.indices, normals);\n vertexData.normals = normals;\n } else {\n vertexData.normals = handledMesh.normals as FloatArray;\n }\n if (this._meshLoadOptions.ImportVertexColors === true) {\n vertexData.colors = handledMesh.colors as FloatArray;\n }\n //Set the data from the VertexBuffer to the current Mesh\n vertexData.applyToMesh(babylonMesh);\n if (this._meshLoadOptions.InvertY) {\n babylonMesh.scaling.y *= -1;\n }\n\n //Push the mesh into an array\n babylonMeshesArray.push(babylonMesh);\n }\n\n let mtlPromises: Array> = [];\n //load the materials\n //Check if we have a file to load\n if (fileToLoad !== \"\" && this._meshLoadOptions.SkipMaterials === false) {\n //Load the file synchronously\n mtlPromises.push(new Promise((resolve, reject) => {\n this._loadMTL(fileToLoad, rootUrl, (dataLoaded) => {\n try {\n //Create materials thanks MTLLoader function\n materialsFromMTLFile.parseMTL(scene, dataLoaded, rootUrl, this._forAssetContainer);\n //Look at each material loaded in the mtl file\n for (var n = 0; n < materialsFromMTLFile.materials.length; n++) {\n //Three variables to get all meshes with the same material\n var startIndex = 0;\n var _indices = [];\n var _index;\n\n //The material from MTL file is used in the meshes loaded\n //Push the indice in an array\n //Check if the material is not used for another mesh\n while ((_index = materialToUse.indexOf(materialsFromMTLFile.materials[n].name, startIndex)) > -1) {\n _indices.push(_index);\n startIndex = _index + 1;\n }\n //If the material is not used dispose it\n if (_index === -1 && _indices.length === 0) {\n //If the material is not needed, remove it\n materialsFromMTLFile.materials[n].dispose();\n } else {\n for (var o = 0; o < _indices.length; o++) {\n //Apply the material to the Mesh for each mesh with the material\n babylonMeshesArray[_indices[o]].material = materialsFromMTLFile.materials[n];\n }\n }\n }\n resolve();\n } catch (e) {\n Tools.Warn(`Error processing MTL file: '${fileToLoad}'`);\n if (this._meshLoadOptions.MaterialLoadingFailsSilently) {\n resolve();\n } else {\n reject(e);\n }\n }\n }, (pathOfFile: string, exception?: any) => {\n Tools.Warn(`Error downloading MTL file: '${fileToLoad}'`);\n if (this._meshLoadOptions.MaterialLoadingFailsSilently) {\n resolve();\n } else {\n reject(exception);\n }\n });\n }));\n\n }\n //Return an array with all Mesh\n return Promise.all(mtlPromises).then(() => {\n return babylonMeshesArray;\n });\n }\n\n}\n\nif (SceneLoader) {\n //Add this loader into the register plugin\n SceneLoader.RegisterPlugin(new OBJFileLoader());\n}","export * from \"./stlFileLoader\";","import { Nullable } from \"babylonjs/types\";\nimport { Tools } from \"babylonjs/Misc/tools\";\nimport { VertexBuffer } from \"babylonjs/Meshes/buffer\";\nimport { Skeleton } from \"babylonjs/Bones/skeleton\";\nimport { IParticleSystem } from \"babylonjs/Particles/IParticleSystem\";\nimport { AbstractMesh } from \"babylonjs/Meshes/abstractMesh\";\nimport { Mesh } from \"babylonjs/Meshes/mesh\";\nimport { SceneLoader, ISceneLoaderPlugin, ISceneLoaderPluginExtensions } from \"babylonjs/Loading/sceneLoader\";\nimport { AssetContainer } from \"babylonjs/assetContainer\";\nimport { Scene } from \"babylonjs/scene\";\n\n/**\n * STL file type loader.\n * This is a babylon scene loader plugin.\n */\nexport class STLFileLoader implements ISceneLoaderPlugin {\n\n /** @hidden */\n public solidPattern = /solid (\\S*)([\\S\\s]*?)endsolid[ ]*(\\S*)/g;\n\n /** @hidden */\n public facetsPattern = /facet([\\s\\S]*?)endfacet/g;\n /** @hidden */\n public normalPattern = /normal[\\s]+([\\-+]?[0-9]+\\.?[0-9]*([eE][\\-+]?[0-9]+)?)+[\\s]+([\\-+]?[0-9]*\\.?[0-9]+([eE][\\-+]?[0-9]+)?)+[\\s]+([\\-+]?[0-9]*\\.?[0-9]+([eE][\\-+]?[0-9]+)?)+/g;\n /** @hidden */\n public vertexPattern = /vertex[\\s]+([\\-+]?[0-9]+\\.?[0-9]*([eE][\\-+]?[0-9]+)?)+[\\s]+([\\-+]?[0-9]*\\.?[0-9]+([eE][\\-+]?[0-9]+)?)+[\\s]+([\\-+]?[0-9]*\\.?[0-9]+([eE][\\-+]?[0-9]+)?)+/g;\n\n /**\n * Defines the name of the plugin.\n */\n public name = \"stl\";\n\n /**\n * Defines the extensions the stl loader is able to load.\n * force data to come in as an ArrayBuffer\n * we'll convert to string if it looks like it's an ASCII .stl\n */\n public extensions: ISceneLoaderPluginExtensions = {\n \".stl\": { isBinary: true },\n };\n\n /**\n * Import meshes into a scene.\n * @param meshesNames An array of mesh names, a single mesh name, or empty string for all meshes that filter what meshes are imported\n * @param scene The scene to import into\n * @param data The data to import\n * @param rootUrl The root url for scene and resources\n * @param meshes The meshes array to import into\n * @param particleSystems The particle systems array to import into\n * @param skeletons The skeletons array to import into\n * @param onError The callback when import fails\n * @returns True if successful or false otherwise\n */\n public importMesh(meshesNames: any, scene: Scene, data: any, rootUrl: string, meshes: Nullable, particleSystems: Nullable, skeletons: Nullable): boolean {\n var matches;\n\n if (typeof data !== \"string\") {\n\n if (this._isBinary(data)) {\n // binary .stl\n var babylonMesh = new Mesh(\"stlmesh\", scene);\n this._parseBinary(babylonMesh, data);\n if (meshes) {\n meshes.push(babylonMesh);\n }\n return true;\n }\n\n // ASCII .stl\n\n // convert to string\n var array_buffer = new Uint8Array(data);\n var str = '';\n for (var i = 0; i < data.byteLength; i++) {\n str += String.fromCharCode(array_buffer[i]); // implicitly assumes little-endian\n }\n data = str;\n }\n\n //if arrived here, data is a string, containing the STLA data.\n\n while (matches = this.solidPattern.exec(data)) {\n var meshName = matches[1];\n var meshNameFromEnd = matches[3];\n if (meshName != meshNameFromEnd) {\n Tools.Error(\"Error in STL, solid name != endsolid name\");\n return false;\n }\n\n // check meshesNames\n if (meshesNames && meshName) {\n if (meshesNames instanceof Array) {\n if (!meshesNames.indexOf(meshName)) {\n continue;\n }\n } else {\n if (meshName !== meshesNames) {\n continue;\n }\n }\n }\n\n // stl mesh name can be empty as well\n meshName = meshName || \"stlmesh\";\n\n var babylonMesh = new Mesh(meshName, scene);\n this._parseASCII(babylonMesh, matches[2]);\n if (meshes) {\n meshes.push(babylonMesh);\n }\n }\n\n return true;\n\n }\n\n /**\n * Load into a scene.\n * @param scene The scene to load into\n * @param data The data to import\n * @param rootUrl The root url for scene and resources\n * @param onError The callback when import fails\n * @returns true if successful or false otherwise\n */\n public load(scene: Scene, data: any, rootUrl: string): boolean {\n var result = this.importMesh(null, scene, data, rootUrl, null, null, null);\n return result;\n }\n\n /**\n * Load into an asset container.\n * @param scene The scene to load into\n * @param data The data to import\n * @param rootUrl The root url for scene and resources\n * @param onError The callback when import fails\n * @returns The loaded asset container\n */\n public loadAssetContainer(scene: Scene, data: string, rootUrl: string, onError?: (message: string, exception?: any) => void): AssetContainer {\n var container = new AssetContainer(scene);\n scene._blockEntityCollection = true;\n this.importMesh(null, scene, data, rootUrl, container.meshes, null, null);\n scene._blockEntityCollection = false;\n return container;\n }\n\n private _isBinary(data: any) {\n\n // check if file size is correct for binary stl\n var faceSize, nFaces, reader;\n reader = new DataView(data);\n faceSize = (32 / 8 * 3) + ((32 / 8 * 3) * 3) + (16 / 8);\n nFaces = reader.getUint32(80, true);\n\n if (80 + (32 / 8) + (nFaces * faceSize) === reader.byteLength) {\n return true;\n }\n\n // check characters higher than ASCII to confirm binary\n var fileLength = reader.byteLength;\n for (var index = 0; index < fileLength; index++) {\n if (reader.getUint8(index) > 127) {\n return true;\n }\n }\n\n return false;\n }\n\n private _parseBinary(mesh: Mesh, data: ArrayBuffer) {\n\n var reader = new DataView(data);\n var faces = reader.getUint32(80, true);\n\n var dataOffset = 84;\n var faceLength = 12 * 4 + 2;\n\n var offset = 0;\n\n var positions = new Float32Array(faces * 3 * 3);\n var normals = new Float32Array(faces * 3 * 3);\n var indices = new Uint32Array(faces * 3);\n var indicesCount = 0;\n\n for (var face = 0; face < faces; face++) {\n\n var start = dataOffset + face * faceLength;\n var normalX = reader.getFloat32(start, true);\n var normalY = reader.getFloat32(start + 4, true);\n var normalZ = reader.getFloat32(start + 8, true);\n\n for (var i = 1; i <= 3; i++) {\n\n var vertexstart = start + i * 12;\n\n // ordering is intentional to match ascii import\n positions[offset] = reader.getFloat32(vertexstart, true);\n positions[offset + 2] = reader.getFloat32(vertexstart + 4, true);\n positions[offset + 1] = reader.getFloat32(vertexstart + 8, true);\n\n normals[offset] = normalX;\n normals[offset + 2] = normalY;\n normals[offset + 1] = normalZ;\n\n offset += 3;\n }\n indices[indicesCount] = indicesCount++;\n indices[indicesCount] = indicesCount++;\n indices[indicesCount] = indicesCount++;\n }\n\n mesh.setVerticesData(VertexBuffer.PositionKind, positions);\n mesh.setVerticesData(VertexBuffer.NormalKind, normals);\n mesh.setIndices(indices);\n mesh.computeWorldMatrix(true);\n }\n\n private _parseASCII(mesh: Mesh, solidData: string) {\n\n var positions = [];\n var normals = [];\n var indices = [];\n var indicesCount = 0;\n\n //load facets, ignoring loop as the standard doesn't define it can contain more than vertices\n var matches;\n while (matches = this.facetsPattern.exec(solidData)) {\n var facet = matches[1];\n //one normal per face\n var normalMatches = this.normalPattern.exec(facet);\n this.normalPattern.lastIndex = 0;\n if (!normalMatches) {\n continue;\n }\n var normal = [Number(normalMatches[1]), Number(normalMatches[5]), Number(normalMatches[3])];\n\n var vertexMatch;\n while (vertexMatch = this.vertexPattern.exec(facet)) {\n positions.push(Number(vertexMatch[1]), Number(vertexMatch[5]), Number(vertexMatch[3]));\n normals.push(normal[0], normal[1], normal[2]);\n }\n indices.push(indicesCount++, indicesCount++, indicesCount++);\n this.vertexPattern.lastIndex = 0;\n }\n\n this.facetsPattern.lastIndex = 0;\n mesh.setVerticesData(VertexBuffer.PositionKind, positions);\n mesh.setVerticesData(VertexBuffer.NormalKind, normals);\n mesh.setIndices(indices);\n mesh.computeWorldMatrix(true);\n }\n}\n\nif (SceneLoader) {\n SceneLoader.RegisterPlugin(new STLFileLoader());\n}","import { GLTFLoaderExtension } from \"./glTFLoader\";\r\nimport { GLTFUtils } from \"./glTFLoaderUtils\";\r\nimport { Scene } from \"babylonjs/scene\";\r\nimport { IGLTFLoaderData } from \"../glTFFileLoader\";\r\nimport { IGLTFRuntime, IGLTFTexture, IGLTFImage, IGLTFBufferView, EComponentType, IGLTFShader } from \"./glTFLoaderInterfaces\";\r\nimport { GLTFLoader, GLTFLoaderBase } from \"./glTFLoader\";\r\nimport { IDataBuffer } from 'babylonjs/Misc/dataReader';\r\n\r\nconst BinaryExtensionBufferName = \"binary_glTF\";\r\n\r\ninterface IGLTFBinaryExtensionShader {\r\n bufferView: string;\r\n}\r\n\r\ninterface IGLTFBinaryExtensionImage {\r\n bufferView: string;\r\n mimeType: string;\r\n height: number;\r\n width: number;\r\n}\r\n\r\n/** @hidden */\r\nexport class GLTFBinaryExtension extends GLTFLoaderExtension {\r\n private _bin: IDataBuffer;\r\n\r\n public constructor() {\r\n super(\"KHR_binary_glTF\");\r\n }\r\n\r\n public loadRuntimeAsync(scene: Scene, data: IGLTFLoaderData, rootUrl: string, onSuccess: (gltfRuntime: IGLTFRuntime) => void, onError: (message: string) => void): boolean {\r\n var extensionsUsed = (data.json).extensionsUsed;\r\n if (!extensionsUsed || extensionsUsed.indexOf(this.name) === -1 || !data.bin) {\r\n return false;\r\n }\r\n\r\n this._bin = data.bin;\r\n onSuccess(GLTFLoaderBase.CreateRuntime(data.json, scene, rootUrl));\r\n return true;\r\n }\r\n\r\n public loadBufferAsync(gltfRuntime: IGLTFRuntime, id: string, onSuccess: (buffer: ArrayBufferView) => void, onError: (message: string) => void): boolean {\r\n if (gltfRuntime.extensionsUsed.indexOf(this.name) === -1) {\r\n return false;\r\n }\r\n\r\n if (id !== BinaryExtensionBufferName) {\r\n return false;\r\n }\r\n\r\n this._bin.readAsync(0, this._bin.byteLength).then(onSuccess, (error) => onError(error.message));\r\n return true;\r\n }\r\n\r\n public loadTextureBufferAsync(gltfRuntime: IGLTFRuntime, id: string, onSuccess: (buffer: ArrayBufferView) => void, onError: (message: string) => void): boolean {\r\n var texture: IGLTFTexture = gltfRuntime.textures[id];\r\n var source: IGLTFImage = gltfRuntime.images[texture.source];\r\n if (!source.extensions || !(this.name in source.extensions)) {\r\n return false;\r\n }\r\n\r\n var sourceExt: IGLTFBinaryExtensionImage = source.extensions[this.name];\r\n var bufferView: IGLTFBufferView = gltfRuntime.bufferViews[sourceExt.bufferView];\r\n var buffer = GLTFUtils.GetBufferFromBufferView(gltfRuntime, bufferView, 0, bufferView.byteLength, EComponentType.UNSIGNED_BYTE);\r\n onSuccess(buffer);\r\n return true;\r\n }\r\n\r\n public loadShaderStringAsync(gltfRuntime: IGLTFRuntime, id: string, onSuccess: (shaderString: string) => void, onError: (message: string) => void): boolean {\r\n var shader: IGLTFShader = gltfRuntime.shaders[id];\r\n if (!shader.extensions || !(this.name in shader.extensions)) {\r\n return false;\r\n }\r\n\r\n var binaryExtensionShader: IGLTFBinaryExtensionShader = shader.extensions[this.name];\r\n var bufferView: IGLTFBufferView = gltfRuntime.bufferViews[binaryExtensionShader.bufferView];\r\n var shaderBytes = GLTFUtils.GetBufferFromBufferView(gltfRuntime, bufferView, 0, bufferView.byteLength, EComponentType.UNSIGNED_BYTE);\r\n\r\n setTimeout(() => {\r\n var shaderString = GLTFUtils.DecodeBufferToText(shaderBytes);\r\n onSuccess(shaderString);\r\n });\r\n\r\n return true;\r\n }\r\n}\r\n\r\nGLTFLoader.RegisterExtension(new GLTFBinaryExtension());","import { IGLTFRuntime, IGLTFTechniqueParameter, IGLTFAnimation, IGLTFAnimationSampler, IGLTFNode, IGLTFSkins, INodeToRoot, IJointNode, IGLTFMesh, IGLTFAccessor, IGLTFLight, IGLTFAmbienLight, IGLTFDirectionalLight, IGLTFPointLight, IGLTFSpotLight, IGLTFCamera, IGLTFCameraPerspective, IGLTFScene, IGLTFTechnique, IGLTFMaterial, EParameterType, IGLTFProgram, IGLTFBuffer, IGLTFTexture, IGLTFImage, IGLTFSampler, ETextureFilterType, IGLTFShader, IGLTFTechniqueStates, ECullingType, EBlendingFunction, EShaderType } from \"./glTFLoaderInterfaces\";\r\n\r\nimport { FloatArray, Nullable } from \"babylonjs/types\";\r\nimport { Quaternion, Vector3, Matrix } from \"babylonjs/Maths/math.vector\";\r\nimport { Color3 } from 'babylonjs/Maths/math.color';\r\nimport { Tools } from \"babylonjs/Misc/tools\";\r\nimport { Camera } from \"babylonjs/Cameras/camera\";\r\nimport { FreeCamera } from \"babylonjs/Cameras/freeCamera\";\r\nimport { Animation } from \"babylonjs/Animations/animation\";\r\nimport { Bone } from \"babylonjs/Bones/bone\";\r\nimport { Skeleton } from \"babylonjs/Bones/skeleton\";\r\nimport { Effect } from \"babylonjs/Materials/effect\";\r\nimport { Material } from \"babylonjs/Materials/material\";\r\nimport { MultiMaterial } from \"babylonjs/Materials/multiMaterial\";\r\nimport { StandardMaterial } from \"babylonjs/Materials/standardMaterial\";\r\nimport { ShaderMaterial } from \"babylonjs/Materials/shaderMaterial\";\r\nimport { Texture } from \"babylonjs/Materials/Textures/texture\";\r\nimport { Node } from \"babylonjs/node\";\r\nimport { VertexData } from \"babylonjs/Meshes/mesh.vertexData\";\r\nimport { VertexBuffer } from \"babylonjs/Meshes/buffer\";\r\nimport { Geometry } from \"babylonjs/Meshes/geometry\";\r\nimport { SubMesh } from \"babylonjs/Meshes/subMesh\";\r\nimport { AbstractMesh } from \"babylonjs/Meshes/abstractMesh\";\r\nimport { Mesh } from \"babylonjs/Meshes/mesh\";\r\nimport { HemisphericLight } from \"babylonjs/Lights/hemisphericLight\";\r\nimport { DirectionalLight } from \"babylonjs/Lights/directionalLight\";\r\nimport { PointLight } from \"babylonjs/Lights/pointLight\";\r\nimport { SpotLight } from \"babylonjs/Lights/spotLight\";\r\nimport { ISceneLoaderProgressEvent } from \"babylonjs/Loading/sceneLoader\";\r\nimport { Scene } from \"babylonjs/scene\";\r\n\r\nimport { GLTFUtils } from \"./glTFLoaderUtils\";\r\nimport { GLTFFileLoader, IGLTFLoader, GLTFLoaderState, IGLTFLoaderData, IImportMeshAsyncOutput } from \"../glTFFileLoader\";\r\nimport { Constants } from 'babylonjs/Engines/constants';\r\n\r\n/**\r\n* Tokenizer. Used for shaders compatibility\r\n* Automatically map world, view, projection, worldViewProjection, attributes and so on\r\n*/\r\nenum ETokenType {\r\n IDENTIFIER = 1,\r\n\r\n UNKNOWN = 2,\r\n END_OF_INPUT = 3\r\n}\r\n\r\nclass Tokenizer {\r\n private _toParse: string;\r\n private _pos: number = 0;\r\n private _maxPos: number;\r\n\r\n public currentToken: ETokenType = ETokenType.UNKNOWN;\r\n public currentIdentifier: string = \"\";\r\n public currentString: string = \"\";\r\n public isLetterOrDigitPattern: RegExp = /^[a-zA-Z0-9]+$/;\r\n\r\n constructor(toParse: string) {\r\n this._toParse = toParse;\r\n this._maxPos = toParse.length;\r\n }\r\n\r\n public getNextToken(): ETokenType {\r\n if (this.isEnd()) { return ETokenType.END_OF_INPUT; }\r\n\r\n this.currentString = this.read();\r\n this.currentToken = ETokenType.UNKNOWN;\r\n\r\n if (this.currentString === \"_\" || this.isLetterOrDigitPattern.test(this.currentString)) {\r\n this.currentToken = ETokenType.IDENTIFIER;\r\n this.currentIdentifier = this.currentString;\r\n while (!this.isEnd() && (this.isLetterOrDigitPattern.test(this.currentString = this.peek()) || this.currentString === \"_\")) {\r\n this.currentIdentifier += this.currentString;\r\n this.forward();\r\n }\r\n }\r\n\r\n return this.currentToken;\r\n }\r\n\r\n public peek(): string {\r\n return this._toParse[this._pos];\r\n }\r\n\r\n public read(): string {\r\n return this._toParse[this._pos++];\r\n }\r\n\r\n public forward(): void {\r\n this._pos++;\r\n }\r\n\r\n public isEnd(): boolean {\r\n return this._pos >= this._maxPos;\r\n }\r\n}\r\n\r\n/**\r\n* Values\r\n*/\r\nvar glTFTransforms = [\"MODEL\", \"VIEW\", \"PROJECTION\", \"MODELVIEW\", \"MODELVIEWPROJECTION\", \"JOINTMATRIX\"];\r\nvar babylonTransforms = [\"world\", \"view\", \"projection\", \"worldView\", \"worldViewProjection\", \"mBones\"];\r\n\r\nvar glTFAnimationPaths = [\"translation\", \"rotation\", \"scale\"];\r\nvar babylonAnimationPaths = [\"position\", \"rotationQuaternion\", \"scaling\"];\r\n\r\n/**\r\n* Parse\r\n*/\r\nvar parseBuffers = (parsedBuffers: any, gltfRuntime: IGLTFRuntime) => {\r\n for (var buf in parsedBuffers) {\r\n var parsedBuffer = parsedBuffers[buf];\r\n gltfRuntime.buffers[buf] = parsedBuffer;\r\n gltfRuntime.buffersCount++;\r\n }\r\n};\r\n\r\nvar parseShaders = (parsedShaders: any, gltfRuntime: IGLTFRuntime) => {\r\n for (var sha in parsedShaders) {\r\n var parsedShader = parsedShaders[sha];\r\n gltfRuntime.shaders[sha] = parsedShader;\r\n gltfRuntime.shaderscount++;\r\n }\r\n};\r\n\r\nvar parseObject = (parsedObjects: any, runtimeProperty: string, gltfRuntime: IGLTFRuntime) => {\r\n for (var object in parsedObjects) {\r\n var parsedObject = parsedObjects[object];\r\n (gltfRuntime)[runtimeProperty][object] = parsedObject;\r\n }\r\n};\r\n\r\n/**\r\n* Utils\r\n*/\r\nvar normalizeUVs = (buffer: any) => {\r\n if (!buffer) {\r\n return;\r\n }\r\n\r\n for (var i = 0; i < buffer.length / 2; i++) {\r\n buffer[i * 2 + 1] = 1.0 - buffer[i * 2 + 1];\r\n }\r\n};\r\n\r\nvar getAttribute = (attributeParameter: IGLTFTechniqueParameter): Nullable => {\r\n if (attributeParameter.semantic === \"NORMAL\") {\r\n return \"normal\";\r\n } else if (attributeParameter.semantic === \"POSITION\") {\r\n return \"position\";\r\n } else if (attributeParameter.semantic === \"JOINT\") {\r\n return \"matricesIndices\";\r\n } else if (attributeParameter.semantic === \"WEIGHT\") {\r\n return \"matricesWeights\";\r\n } else if (attributeParameter.semantic === \"COLOR\") {\r\n return \"color\";\r\n } else if (attributeParameter.semantic && attributeParameter.semantic.indexOf(\"TEXCOORD_\") !== -1) {\r\n var channel = Number(attributeParameter.semantic.split(\"_\")[1]);\r\n return \"uv\" + (channel === 0 ? \"\" : channel + 1);\r\n }\r\n\r\n return null;\r\n};\r\n\r\n/**\r\n* Loads and creates animations\r\n*/\r\nvar loadAnimations = (gltfRuntime: IGLTFRuntime) => {\r\n for (var anim in gltfRuntime.animations) {\r\n var animation: IGLTFAnimation = gltfRuntime.animations[anim];\r\n\r\n if (!animation.channels || !animation.samplers) {\r\n continue;\r\n }\r\n\r\n var lastAnimation: Nullable = null;\r\n\r\n for (var i = 0; i < animation.channels.length; i++) {\r\n // Get parameters and load buffers\r\n var channel = animation.channels[i];\r\n var sampler: IGLTFAnimationSampler = animation.samplers[channel.sampler];\r\n\r\n if (!sampler) {\r\n continue;\r\n }\r\n\r\n var inputData: Nullable = null;\r\n var outputData: Nullable = null;\r\n\r\n if (animation.parameters) {\r\n inputData = animation.parameters[sampler.input];\r\n outputData = animation.parameters[sampler.output];\r\n }\r\n else {\r\n inputData = sampler.input;\r\n outputData = sampler.output;\r\n }\r\n\r\n var bufferInput = GLTFUtils.GetBufferFromAccessor(gltfRuntime, gltfRuntime.accessors[inputData]);\r\n var bufferOutput = GLTFUtils.GetBufferFromAccessor(gltfRuntime, gltfRuntime.accessors[outputData]);\r\n\r\n var targetID = channel.target.id;\r\n var targetNode: any = gltfRuntime.scene.getNodeByID(targetID);\r\n\r\n if (targetNode === null) {\r\n targetNode = gltfRuntime.scene.getNodeByName(targetID);\r\n }\r\n\r\n if (targetNode === null) {\r\n Tools.Warn(\"Creating animation named \" + anim + \". But cannot find node named \" + targetID + \" to attach to\");\r\n continue;\r\n }\r\n\r\n var isBone = targetNode instanceof Bone;\r\n\r\n // Get target path (position, rotation or scaling)\r\n var targetPath = channel.target.path;\r\n var targetPathIndex = glTFAnimationPaths.indexOf(targetPath);\r\n\r\n if (targetPathIndex !== -1) {\r\n targetPath = babylonAnimationPaths[targetPathIndex];\r\n }\r\n\r\n // Determine animation type\r\n var animationType = Animation.ANIMATIONTYPE_MATRIX;\r\n\r\n if (!isBone) {\r\n if (targetPath === \"rotationQuaternion\") {\r\n animationType = Animation.ANIMATIONTYPE_QUATERNION;\r\n targetNode.rotationQuaternion = new Quaternion();\r\n }\r\n else {\r\n animationType = Animation.ANIMATIONTYPE_VECTOR3;\r\n }\r\n }\r\n\r\n // Create animation and key frames\r\n var babylonAnimation: Nullable = null;\r\n var keys = [];\r\n var arrayOffset = 0;\r\n var modifyKey = false;\r\n\r\n if (isBone && lastAnimation && lastAnimation.getKeys().length === bufferInput.length) {\r\n babylonAnimation = lastAnimation;\r\n modifyKey = true;\r\n }\r\n\r\n if (!modifyKey) {\r\n gltfRuntime.scene._blockEntityCollection = gltfRuntime.forAssetContainer;\r\n babylonAnimation = new Animation(anim, isBone ? \"_matrix\" : targetPath, 1, animationType, Animation.ANIMATIONLOOPMODE_CYCLE);\r\n gltfRuntime.scene._blockEntityCollection = false;\r\n }\r\n\r\n // For each frame\r\n for (var j = 0; j < bufferInput.length; j++) {\r\n var value: any = null;\r\n\r\n if (targetPath === \"rotationQuaternion\") { // VEC4\r\n value = Quaternion.FromArray([bufferOutput[arrayOffset], bufferOutput[arrayOffset + 1], bufferOutput[arrayOffset + 2], bufferOutput[arrayOffset + 3]]);\r\n arrayOffset += 4;\r\n }\r\n else { // Position and scaling are VEC3\r\n value = Vector3.FromArray([bufferOutput[arrayOffset], bufferOutput[arrayOffset + 1], bufferOutput[arrayOffset + 2]]);\r\n arrayOffset += 3;\r\n }\r\n\r\n if (isBone) {\r\n var bone = targetNode;\r\n var translation = Vector3.Zero();\r\n var rotationQuaternion = new Quaternion();\r\n var scaling = Vector3.Zero();\r\n\r\n // Warning on decompose\r\n var mat = bone.getBaseMatrix();\r\n\r\n if (modifyKey && lastAnimation) {\r\n mat = lastAnimation.getKeys()[j].value;\r\n }\r\n\r\n mat.decompose(scaling, rotationQuaternion, translation);\r\n\r\n if (targetPath === \"position\") {\r\n translation = value;\r\n }\r\n else if (targetPath === \"rotationQuaternion\") {\r\n rotationQuaternion = value;\r\n }\r\n else {\r\n scaling = value;\r\n }\r\n\r\n value = Matrix.Compose(scaling, rotationQuaternion, translation);\r\n }\r\n\r\n if (!modifyKey) {\r\n keys.push({\r\n frame: bufferInput[j],\r\n value: value\r\n });\r\n }\r\n else if (lastAnimation) {\r\n lastAnimation.getKeys()[j].value = value;\r\n }\r\n }\r\n\r\n // Finish\r\n if (!modifyKey && babylonAnimation) {\r\n babylonAnimation.setKeys(keys);\r\n targetNode.animations.push(babylonAnimation);\r\n }\r\n\r\n lastAnimation = babylonAnimation;\r\n\r\n gltfRuntime.scene.stopAnimation(targetNode);\r\n gltfRuntime.scene.beginAnimation(targetNode, 0, bufferInput[bufferInput.length - 1], true, 1.0);\r\n }\r\n }\r\n};\r\n\r\n/**\r\n* Returns the bones transformation matrix\r\n*/\r\nvar configureBoneTransformation = (node: IGLTFNode): Matrix => {\r\n var mat: Nullable = null;\r\n\r\n if (node.translation || node.rotation || node.scale) {\r\n var scale = Vector3.FromArray(node.scale || [1, 1, 1]);\r\n var rotation = Quaternion.FromArray(node.rotation || [0, 0, 0, 1]);\r\n var position = Vector3.FromArray(node.translation || [0, 0, 0]);\r\n\r\n mat = Matrix.Compose(scale, rotation, position);\r\n }\r\n else {\r\n mat = Matrix.FromArray(node.matrix);\r\n }\r\n\r\n return mat;\r\n};\r\n\r\n/**\r\n* Returns the parent bone\r\n*/\r\nvar getParentBone = (gltfRuntime: IGLTFRuntime, skins: IGLTFSkins, jointName: string, newSkeleton: Skeleton): Nullable => {\r\n // Try to find\r\n for (var i = 0; i < newSkeleton.bones.length; i++) {\r\n if (newSkeleton.bones[i].name === jointName) {\r\n return newSkeleton.bones[i];\r\n }\r\n }\r\n\r\n // Not found, search in gltf nodes\r\n var nodes = gltfRuntime.nodes;\r\n for (var nde in nodes) {\r\n var node: IGLTFNode = nodes[nde];\r\n\r\n if (!node.jointName) {\r\n continue;\r\n }\r\n\r\n var children = node.children;\r\n for (var i = 0; i < children.length; i++) {\r\n var child: IGLTFNode = gltfRuntime.nodes[children[i]];\r\n if (!child.jointName) {\r\n continue;\r\n }\r\n\r\n if (child.jointName === jointName) {\r\n var mat = configureBoneTransformation(node);\r\n var bone = new Bone(node.name || \"\", newSkeleton, getParentBone(gltfRuntime, skins, node.jointName, newSkeleton), mat);\r\n bone.id = nde;\r\n return bone;\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n};\r\n\r\n/**\r\n* Returns the appropriate root node\r\n*/\r\nvar getNodeToRoot = (nodesToRoot: INodeToRoot[], id: string): Nullable => {\r\n for (var i = 0; i < nodesToRoot.length; i++) {\r\n var nodeToRoot = nodesToRoot[i];\r\n\r\n for (var j = 0; j < nodeToRoot.node.children.length; j++) {\r\n var child = nodeToRoot.node.children[j];\r\n if (child === id) {\r\n return nodeToRoot.bone;\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n};\r\n\r\n/**\r\n* Returns the node with the joint name\r\n*/\r\nvar getJointNode = (gltfRuntime: IGLTFRuntime, jointName: string): Nullable => {\r\n var nodes = gltfRuntime.nodes;\r\n var node: IGLTFNode = nodes[jointName];\r\n if (node) {\r\n return {\r\n node: node,\r\n id: jointName\r\n };\r\n }\r\n\r\n for (var nde in nodes) {\r\n node = nodes[nde];\r\n if (node.jointName === jointName) {\r\n return {\r\n node: node,\r\n id: nde\r\n };\r\n }\r\n }\r\n\r\n return null;\r\n};\r\n\r\n/**\r\n* Checks if a nodes is in joints\r\n*/\r\nvar nodeIsInJoints = (skins: IGLTFSkins, id: string): boolean => {\r\n for (var i = 0; i < skins.jointNames.length; i++) {\r\n if (skins.jointNames[i] === id) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n};\r\n\r\n/**\r\n* Fills the nodes to root for bones and builds hierarchy\r\n*/\r\nvar getNodesToRoot = (gltfRuntime: IGLTFRuntime, newSkeleton: Skeleton, skins: IGLTFSkins, nodesToRoot: INodeToRoot[]) => {\r\n // Creates nodes for root\r\n for (var nde in gltfRuntime.nodes) {\r\n var node: IGLTFNode = gltfRuntime.nodes[nde];\r\n var id = nde;\r\n\r\n if (!node.jointName || nodeIsInJoints(skins, node.jointName)) {\r\n continue;\r\n }\r\n\r\n // Create node to root bone\r\n var mat = configureBoneTransformation(node);\r\n var bone = new Bone(node.name || \"\", newSkeleton, null, mat);\r\n bone.id = id;\r\n nodesToRoot.push({ bone: bone, node: node, id: id });\r\n }\r\n\r\n // Parenting\r\n for (var i = 0; i < nodesToRoot.length; i++) {\r\n var nodeToRoot = nodesToRoot[i];\r\n var children = nodeToRoot.node.children;\r\n\r\n for (var j = 0; j < children.length; j++) {\r\n var child: Nullable = null;\r\n\r\n for (var k = 0; k < nodesToRoot.length; k++) {\r\n if (nodesToRoot[k].id === children[j]) {\r\n child = nodesToRoot[k];\r\n break;\r\n }\r\n }\r\n\r\n if (child) {\r\n (child.bone)._parent = nodeToRoot.bone;\r\n nodeToRoot.bone.children.push(child.bone);\r\n }\r\n }\r\n }\r\n};\r\n\r\n/**\r\n* Imports a skeleton\r\n*/\r\nvar importSkeleton = (gltfRuntime: IGLTFRuntime, skins: IGLTFSkins, mesh: Mesh, newSkeleton: Skeleton | undefined, id: string): Skeleton => {\r\n\r\n if (!newSkeleton) {\r\n newSkeleton = new Skeleton(skins.name || \"\", \"\", gltfRuntime.scene);\r\n }\r\n\r\n if (!skins.babylonSkeleton) {\r\n return newSkeleton;\r\n }\r\n\r\n // Find the root bones\r\n var nodesToRoot: INodeToRoot[] = [];\r\n var nodesToRootToAdd: Bone[] = [];\r\n\r\n getNodesToRoot(gltfRuntime, newSkeleton, skins, nodesToRoot);\r\n newSkeleton.bones = [];\r\n\r\n // Joints\r\n for (var i = 0; i < skins.jointNames.length; i++) {\r\n var jointNode = getJointNode(gltfRuntime, skins.jointNames[i]);\r\n\r\n if (!jointNode) {\r\n continue;\r\n }\r\n\r\n var node = jointNode.node;\r\n\r\n if (!node) {\r\n Tools.Warn(\"Joint named \" + skins.jointNames[i] + \" does not exist\");\r\n continue;\r\n }\r\n\r\n var id = jointNode.id;\r\n\r\n // Optimize, if the bone already exists...\r\n var existingBone = gltfRuntime.scene.getBoneByID(id);\r\n if (existingBone) {\r\n newSkeleton.bones.push(existingBone);\r\n continue;\r\n }\r\n\r\n // Search for parent bone\r\n var foundBone = false;\r\n var parentBone: Nullable = null;\r\n\r\n for (var j = 0; j < i; j++) {\r\n let jointNode = getJointNode(gltfRuntime, skins.jointNames[j]);\r\n\r\n if (!jointNode) {\r\n continue;\r\n }\r\n\r\n var joint: IGLTFNode = jointNode.node;\r\n\r\n if (!joint) {\r\n Tools.Warn(\"Joint named \" + skins.jointNames[j] + \" does not exist when looking for parent\");\r\n continue;\r\n }\r\n\r\n var children = joint.children;\r\n if (!children) {\r\n continue;\r\n }\r\n foundBone = false;\r\n\r\n for (var k = 0; k < children.length; k++) {\r\n if (children[k] === id) {\r\n parentBone = getParentBone(gltfRuntime, skins, skins.jointNames[j], newSkeleton);\r\n foundBone = true;\r\n break;\r\n }\r\n }\r\n\r\n if (foundBone) {\r\n break;\r\n }\r\n }\r\n\r\n // Create bone\r\n var mat = configureBoneTransformation(node);\r\n\r\n if (!parentBone && nodesToRoot.length > 0) {\r\n parentBone = getNodeToRoot(nodesToRoot, id);\r\n\r\n if (parentBone) {\r\n if (nodesToRootToAdd.indexOf(parentBone) === -1) {\r\n nodesToRootToAdd.push(parentBone);\r\n }\r\n }\r\n }\r\n\r\n var bone = new Bone(node.jointName || \"\", newSkeleton, parentBone, mat);\r\n bone.id = id;\r\n }\r\n\r\n // Polish\r\n var bones = newSkeleton.bones;\r\n newSkeleton.bones = [];\r\n\r\n for (var i = 0; i < skins.jointNames.length; i++) {\r\n var jointNode = getJointNode(gltfRuntime, skins.jointNames[i]);\r\n\r\n if (!jointNode) {\r\n continue;\r\n }\r\n\r\n for (var j = 0; j < bones.length; j++) {\r\n if (bones[j].id === jointNode.id) {\r\n newSkeleton.bones.push(bones[j]);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n newSkeleton.prepare();\r\n\r\n // Finish\r\n for (var i = 0; i < nodesToRootToAdd.length; i++) {\r\n newSkeleton.bones.push(nodesToRootToAdd[i]);\r\n }\r\n\r\n return newSkeleton;\r\n};\r\n\r\n/**\r\n* Imports a mesh and its geometries\r\n*/\r\nvar importMesh = (gltfRuntime: IGLTFRuntime, node: IGLTFNode, meshes: string[], id: string, newMesh: Mesh): Mesh => {\r\n if (!newMesh) {\r\n gltfRuntime.scene._blockEntityCollection = gltfRuntime.forAssetContainer;\r\n newMesh = new Mesh(node.name || \"\", gltfRuntime.scene);\r\n gltfRuntime.scene._blockEntityCollection = false;\r\n newMesh.id = id;\r\n }\r\n\r\n if (!node.babylonNode) {\r\n return newMesh;\r\n }\r\n\r\n const subMaterials: Material[] = [];\r\n\r\n var vertexData: Nullable = null;\r\n var verticesStarts = new Array();\r\n var verticesCounts = new Array();\r\n var indexStarts = new Array();\r\n var indexCounts = new Array();\r\n\r\n for (var meshIndex = 0; meshIndex < meshes.length; meshIndex++) {\r\n var meshID = meshes[meshIndex];\r\n var mesh: IGLTFMesh = gltfRuntime.meshes[meshID];\r\n\r\n if (!mesh) {\r\n continue;\r\n }\r\n\r\n // Positions, normals and UVs\r\n for (var i = 0; i < mesh.primitives.length; i++) {\r\n // Temporary vertex data\r\n var tempVertexData = new VertexData();\r\n\r\n var primitive = mesh.primitives[i];\r\n if (primitive.mode !== 4) {\r\n // continue;\r\n }\r\n\r\n var attributes = primitive.attributes;\r\n var accessor: Nullable = null;\r\n var buffer: any = null;\r\n\r\n // Set positions, normal and uvs\r\n for (var semantic in attributes) {\r\n\r\n // Link accessor and buffer view\r\n accessor = gltfRuntime.accessors[attributes[semantic]];\r\n buffer = GLTFUtils.GetBufferFromAccessor(gltfRuntime, accessor);\r\n\r\n if (semantic === \"NORMAL\") {\r\n tempVertexData.normals = new Float32Array(buffer.length);\r\n (tempVertexData.normals).set(buffer);\r\n }\r\n else if (semantic === \"POSITION\") {\r\n if (GLTFFileLoader.HomogeneousCoordinates) {\r\n tempVertexData.positions = new Float32Array(buffer.length - buffer.length / 4);\r\n\r\n for (var j = 0; j < buffer.length; j += 4) {\r\n tempVertexData.positions[j] = buffer[j];\r\n tempVertexData.positions[j + 1] = buffer[j + 1];\r\n tempVertexData.positions[j + 2] = buffer[j + 2];\r\n }\r\n }\r\n else {\r\n tempVertexData.positions = new Float32Array(buffer.length);\r\n (tempVertexData.positions).set(buffer);\r\n }\r\n\r\n verticesCounts.push(tempVertexData.positions.length);\r\n }\r\n else if (semantic.indexOf(\"TEXCOORD_\") !== -1) {\r\n var channel = Number(semantic.split(\"_\")[1]);\r\n var uvKind = VertexBuffer.UVKind + (channel === 0 ? \"\" : (channel + 1));\r\n var uvs = new Float32Array(buffer.length);\r\n (uvs).set(buffer);\r\n normalizeUVs(uvs);\r\n tempVertexData.set(uvs, uvKind);\r\n }\r\n else if (semantic === \"JOINT\") {\r\n tempVertexData.matricesIndices = new Float32Array(buffer.length);\r\n (tempVertexData.matricesIndices).set(buffer);\r\n }\r\n else if (semantic === \"WEIGHT\") {\r\n tempVertexData.matricesWeights = new Float32Array(buffer.length);\r\n (tempVertexData.matricesWeights).set(buffer);\r\n }\r\n else if (semantic === \"COLOR\") {\r\n tempVertexData.colors = new Float32Array(buffer.length);\r\n (tempVertexData.colors).set(buffer);\r\n }\r\n }\r\n\r\n // Indices\r\n accessor = gltfRuntime.accessors[primitive.indices];\r\n if (accessor) {\r\n buffer = GLTFUtils.GetBufferFromAccessor(gltfRuntime, accessor);\r\n\r\n tempVertexData.indices = new Int32Array(buffer.length);\r\n tempVertexData.indices.set(buffer);\r\n indexCounts.push(tempVertexData.indices.length);\r\n }\r\n else {\r\n // Set indices on the fly\r\n var indices: number[] = [];\r\n for (var j = 0; j < (tempVertexData.positions).length / 3; j++) {\r\n indices.push(j);\r\n }\r\n\r\n tempVertexData.indices = new Int32Array(indices);\r\n indexCounts.push(tempVertexData.indices.length);\r\n }\r\n\r\n if (!vertexData) {\r\n vertexData = tempVertexData;\r\n }\r\n else {\r\n vertexData.merge(tempVertexData);\r\n }\r\n\r\n // Sub material\r\n let material = gltfRuntime.scene.getMaterialByID(primitive.material);\r\n\r\n subMaterials.push(material === null ? GLTFUtils.GetDefaultMaterial(gltfRuntime.scene) : material);\r\n\r\n // Update vertices start and index start\r\n verticesStarts.push(verticesStarts.length === 0 ? 0 : verticesStarts[verticesStarts.length - 1] + verticesCounts[verticesCounts.length - 2]);\r\n indexStarts.push(indexStarts.length === 0 ? 0 : indexStarts[indexStarts.length - 1] + indexCounts[indexCounts.length - 2]);\r\n }\r\n }\r\n let material: StandardMaterial | MultiMaterial;\r\n gltfRuntime.scene._blockEntityCollection = gltfRuntime.forAssetContainer;\r\n if (subMaterials.length > 1) {\r\n material = new MultiMaterial(\"multimat\" + id, gltfRuntime.scene);\r\n (material as MultiMaterial).subMaterials = subMaterials;\r\n }\r\n else {\r\n material = new StandardMaterial(\"multimat\" + id, gltfRuntime.scene);\r\n }\r\n\r\n if (subMaterials.length === 1) {\r\n material = (subMaterials[0] as StandardMaterial);\r\n }\r\n\r\n if (!newMesh.material) {\r\n newMesh.material = material;\r\n }\r\n\r\n // Apply geometry\r\n new Geometry(id, gltfRuntime.scene, vertexData!, false, newMesh);\r\n newMesh.computeWorldMatrix(true);\r\n\r\n gltfRuntime.scene._blockEntityCollection = false;\r\n\r\n // Apply submeshes\r\n newMesh.subMeshes = [];\r\n var index = 0;\r\n for (var meshIndex = 0; meshIndex < meshes.length; meshIndex++) {\r\n var meshID = meshes[meshIndex];\r\n var mesh: IGLTFMesh = gltfRuntime.meshes[meshID];\r\n\r\n if (!mesh) {\r\n continue;\r\n }\r\n\r\n for (var i = 0; i < mesh.primitives.length; i++) {\r\n if (mesh.primitives[i].mode !== 4) {\r\n //continue;\r\n }\r\n\r\n SubMesh.AddToMesh(index, verticesStarts[index], verticesCounts[index], indexStarts[index], indexCounts[index], newMesh, newMesh, true);\r\n index++;\r\n }\r\n }\r\n\r\n // Finish\r\n return newMesh;\r\n};\r\n\r\n/**\r\n* Configure node transformation from position, rotation and scaling\r\n*/\r\nvar configureNode = (newNode: any, position: Vector3, rotation: Quaternion, scaling: Vector3) => {\r\n if (newNode.position) {\r\n newNode.position = position;\r\n }\r\n\r\n if (newNode.rotationQuaternion || newNode.rotation) {\r\n newNode.rotationQuaternion = rotation;\r\n }\r\n\r\n if (newNode.scaling) {\r\n newNode.scaling = scaling;\r\n }\r\n};\r\n\r\n/**\r\n* Configures node from transformation matrix\r\n*/\r\nvar configureNodeFromMatrix = (newNode: Mesh, node: IGLTFNode, parent: Nullable) => {\r\n if (node.matrix) {\r\n var position = new Vector3(0, 0, 0);\r\n var rotation = new Quaternion();\r\n var scaling = new Vector3(0, 0, 0);\r\n var mat = Matrix.FromArray(node.matrix);\r\n mat.decompose(scaling, rotation, position);\r\n\r\n configureNode(newNode, position, rotation, scaling);\r\n }\r\n else if (node.translation && node.rotation && node.scale) {\r\n configureNode(newNode, Vector3.FromArray(node.translation), Quaternion.FromArray(node.rotation), Vector3.FromArray(node.scale));\r\n }\r\n\r\n newNode.computeWorldMatrix(true);\r\n};\r\n\r\n/**\r\n* Imports a node\r\n*/\r\nvar importNode = (gltfRuntime: IGLTFRuntime, node: IGLTFNode, id: string, parent: Nullable): Nullable => {\r\n var lastNode: Nullable = null;\r\n\r\n if (gltfRuntime.importOnlyMeshes && (node.skin || node.meshes)) {\r\n if (gltfRuntime.importMeshesNames && gltfRuntime.importMeshesNames.length > 0 && gltfRuntime.importMeshesNames.indexOf(node.name || \"\") === -1) {\r\n return null;\r\n }\r\n }\r\n\r\n // Meshes\r\n if (node.skin) {\r\n if (node.meshes) {\r\n var skin: IGLTFSkins = gltfRuntime.skins[node.skin];\r\n\r\n var newMesh = importMesh(gltfRuntime, node, node.meshes, id, node.babylonNode);\r\n newMesh.skeleton = gltfRuntime.scene.getLastSkeletonByID(node.skin);\r\n\r\n if (newMesh.skeleton === null) {\r\n newMesh.skeleton = importSkeleton(gltfRuntime, skin, newMesh, skin.babylonSkeleton, node.skin);\r\n\r\n if (!skin.babylonSkeleton) {\r\n skin.babylonSkeleton = newMesh.skeleton;\r\n }\r\n }\r\n\r\n lastNode = newMesh;\r\n }\r\n }\r\n else if (node.meshes) {\r\n /**\r\n * Improve meshes property\r\n */\r\n var newMesh = importMesh(gltfRuntime, node, node.mesh ? [node.mesh] : node.meshes, id, node.babylonNode);\r\n lastNode = newMesh;\r\n }\r\n // Lights\r\n else if (node.light && !node.babylonNode && !gltfRuntime.importOnlyMeshes) {\r\n var light: IGLTFLight = gltfRuntime.lights[node.light];\r\n\r\n if (light) {\r\n if (light.type === \"ambient\") {\r\n var ambienLight: IGLTFAmbienLight = (light)[light.type];\r\n var hemiLight = new HemisphericLight(node.light, Vector3.Zero(), gltfRuntime.scene);\r\n hemiLight.name = node.name || \"\";\r\n\r\n if (ambienLight.color) {\r\n hemiLight.diffuse = Color3.FromArray(ambienLight.color);\r\n }\r\n\r\n lastNode = hemiLight;\r\n }\r\n else if (light.type === \"directional\") {\r\n var directionalLight: IGLTFDirectionalLight = (light)[light.type];\r\n var dirLight = new DirectionalLight(node.light, Vector3.Zero(), gltfRuntime.scene);\r\n dirLight.name = node.name || \"\";\r\n\r\n if (directionalLight.color) {\r\n dirLight.diffuse = Color3.FromArray(directionalLight.color);\r\n }\r\n\r\n lastNode = dirLight;\r\n }\r\n else if (light.type === \"point\") {\r\n var pointLight: IGLTFPointLight = (light)[light.type];\r\n var ptLight = new PointLight(node.light, Vector3.Zero(), gltfRuntime.scene);\r\n ptLight.name = node.name || \"\";\r\n\r\n if (pointLight.color) {\r\n ptLight.diffuse = Color3.FromArray(pointLight.color);\r\n }\r\n\r\n lastNode = ptLight;\r\n }\r\n else if (light.type === \"spot\") {\r\n var spotLight: IGLTFSpotLight = (light)[light.type];\r\n var spLight = new SpotLight(node.light, Vector3.Zero(), Vector3.Zero(), 0, 0, gltfRuntime.scene);\r\n spLight.name = node.name || \"\";\r\n\r\n if (spotLight.color) {\r\n spLight.diffuse = Color3.FromArray(spotLight.color);\r\n }\r\n\r\n if (spotLight.fallOfAngle) {\r\n spLight.angle = spotLight.fallOfAngle;\r\n }\r\n\r\n if (spotLight.fallOffExponent) {\r\n spLight.exponent = spotLight.fallOffExponent;\r\n }\r\n\r\n lastNode = spLight;\r\n }\r\n }\r\n }\r\n // Cameras\r\n else if (node.camera && !node.babylonNode && !gltfRuntime.importOnlyMeshes) {\r\n var camera: IGLTFCamera = gltfRuntime.cameras[node.camera];\r\n\r\n if (camera) {\r\n\r\n gltfRuntime.scene._blockEntityCollection = gltfRuntime.forAssetContainer;\r\n if (camera.type === \"orthographic\") {\r\n var orthoCamera = new FreeCamera(node.camera, Vector3.Zero(), gltfRuntime.scene, false);\r\n\r\n orthoCamera.name = node.name || \"\";\r\n orthoCamera.mode = Camera.ORTHOGRAPHIC_CAMERA;\r\n orthoCamera.attachControl(gltfRuntime.scene.getEngine().getInputElement());\r\n\r\n lastNode = orthoCamera;\r\n }\r\n else if (camera.type === \"perspective\") {\r\n var perspectiveCamera: IGLTFCameraPerspective = (camera)[camera.type];\r\n var persCamera = new FreeCamera(node.camera, Vector3.Zero(), gltfRuntime.scene, false);\r\n\r\n persCamera.name = node.name || \"\";\r\n persCamera.attachControl(gltfRuntime.scene.getEngine().getInputElement());\r\n\r\n if (!perspectiveCamera.aspectRatio) {\r\n perspectiveCamera.aspectRatio = gltfRuntime.scene.getEngine().getRenderWidth() / gltfRuntime.scene.getEngine().getRenderHeight();\r\n }\r\n\r\n if (perspectiveCamera.znear && perspectiveCamera.zfar) {\r\n persCamera.maxZ = perspectiveCamera.zfar;\r\n persCamera.minZ = perspectiveCamera.znear;\r\n }\r\n\r\n lastNode = persCamera;\r\n }\r\n\r\n gltfRuntime.scene._blockEntityCollection = false;\r\n }\r\n }\r\n\r\n // Empty node\r\n if (!node.jointName) {\r\n if (node.babylonNode) {\r\n return node.babylonNode;\r\n }\r\n else if (lastNode === null) {\r\n gltfRuntime.scene._blockEntityCollection = gltfRuntime.forAssetContainer;\r\n var dummy = new Mesh(node.name || \"\", gltfRuntime.scene);\r\n gltfRuntime.scene._blockEntityCollection = false;\r\n node.babylonNode = dummy;\r\n lastNode = dummy;\r\n }\r\n }\r\n\r\n if (lastNode !== null) {\r\n if (node.matrix && lastNode instanceof Mesh) {\r\n configureNodeFromMatrix(lastNode, node, parent);\r\n }\r\n else {\r\n var translation = node.translation || [0, 0, 0];\r\n var rotation = node.rotation || [0, 0, 0, 1];\r\n var scale = node.scale || [1, 1, 1];\r\n configureNode(lastNode, Vector3.FromArray(translation), Quaternion.FromArray(rotation), Vector3.FromArray(scale));\r\n }\r\n\r\n lastNode.updateCache(true);\r\n node.babylonNode = lastNode;\r\n }\r\n\r\n return lastNode;\r\n};\r\n\r\n/**\r\n* Traverses nodes and creates them\r\n*/\r\nvar traverseNodes = (gltfRuntime: IGLTFRuntime, id: string, parent: Nullable, meshIncluded: boolean = false) => {\r\n var node: IGLTFNode = gltfRuntime.nodes[id];\r\n var newNode: Nullable = null;\r\n\r\n if (gltfRuntime.importOnlyMeshes && !meshIncluded && gltfRuntime.importMeshesNames) {\r\n if (gltfRuntime.importMeshesNames.indexOf(node.name || \"\") !== -1 || gltfRuntime.importMeshesNames.length === 0) {\r\n meshIncluded = true;\r\n }\r\n else {\r\n meshIncluded = false;\r\n }\r\n }\r\n else {\r\n meshIncluded = true;\r\n }\r\n\r\n if (!node.jointName && meshIncluded) {\r\n newNode = importNode(gltfRuntime, node, id, parent);\r\n\r\n if (newNode !== null) {\r\n newNode.id = id;\r\n newNode.parent = parent;\r\n }\r\n }\r\n\r\n if (node.children) {\r\n for (var i = 0; i < node.children.length; i++) {\r\n traverseNodes(gltfRuntime, node.children[i], newNode, meshIncluded);\r\n }\r\n }\r\n};\r\n\r\n/**\r\n* do stuff after buffers, shaders are loaded (e.g. hook up materials, load animations, etc.)\r\n*/\r\nvar postLoad = (gltfRuntime: IGLTFRuntime) => {\r\n // Nodes\r\n var currentScene: IGLTFScene = gltfRuntime.currentScene;\r\n\r\n if (currentScene) {\r\n for (var i = 0; i < currentScene.nodes.length; i++) {\r\n traverseNodes(gltfRuntime, currentScene.nodes[i], null);\r\n }\r\n }\r\n else {\r\n for (var thing in gltfRuntime.scenes) {\r\n currentScene = gltfRuntime.scenes[thing];\r\n\r\n for (var i = 0; i < currentScene.nodes.length; i++) {\r\n traverseNodes(gltfRuntime, currentScene.nodes[i], null);\r\n }\r\n }\r\n }\r\n\r\n // Set animations\r\n loadAnimations(gltfRuntime);\r\n\r\n for (var i = 0; i < gltfRuntime.scene.skeletons.length; i++) {\r\n var skeleton = gltfRuntime.scene.skeletons[i];\r\n gltfRuntime.scene.beginAnimation(skeleton, 0, Number.MAX_VALUE, true, 1.0);\r\n }\r\n};\r\n\r\n/**\r\n* onBind shaderrs callback to set uniforms and matrices\r\n*/\r\nvar onBindShaderMaterial = (mesh: AbstractMesh, gltfRuntime: IGLTFRuntime, unTreatedUniforms: { [key: string]: IGLTFTechniqueParameter }, shaderMaterial: ShaderMaterial, technique: IGLTFTechnique, material: IGLTFMaterial, onSuccess: (shaderMaterial: ShaderMaterial) => void) => {\r\n var materialValues = material.values || technique.parameters;\r\n\r\n for (var unif in unTreatedUniforms) {\r\n var uniform: IGLTFTechniqueParameter = unTreatedUniforms[unif];\r\n var type = uniform.type;\r\n\r\n if (type === EParameterType.FLOAT_MAT2 || type === EParameterType.FLOAT_MAT3 || type === EParameterType.FLOAT_MAT4) {\r\n if (uniform.semantic && !uniform.source && !uniform.node) {\r\n GLTFUtils.SetMatrix(gltfRuntime.scene, mesh, uniform, unif, shaderMaterial.getEffect());\r\n }\r\n else if (uniform.semantic && (uniform.source || uniform.node)) {\r\n var source = gltfRuntime.scene.getNodeByName(uniform.source || uniform.node || \"\");\r\n if (source === null) {\r\n source = gltfRuntime.scene.getNodeByID(uniform.source || uniform.node || \"\");\r\n }\r\n if (source === null) {\r\n continue;\r\n }\r\n\r\n GLTFUtils.SetMatrix(gltfRuntime.scene, source, uniform, unif, shaderMaterial.getEffect());\r\n }\r\n }\r\n else {\r\n var value = (materialValues)[technique.uniforms[unif]];\r\n if (!value) {\r\n continue;\r\n }\r\n\r\n if (type === EParameterType.SAMPLER_2D) {\r\n var texture = gltfRuntime.textures[material.values ? value : uniform.value].babylonTexture;\r\n\r\n if (texture === null || texture === undefined) {\r\n continue;\r\n }\r\n\r\n (shaderMaterial.getEffect()).setTexture(unif, texture);\r\n }\r\n else {\r\n GLTFUtils.SetUniform((shaderMaterial.getEffect()), unif, value, type);\r\n }\r\n }\r\n }\r\n\r\n onSuccess(shaderMaterial);\r\n};\r\n\r\n/**\r\n* Prepare uniforms to send the only one time\r\n* Loads the appropriate textures\r\n*/\r\nvar prepareShaderMaterialUniforms = (gltfRuntime: IGLTFRuntime, shaderMaterial: ShaderMaterial, technique: IGLTFTechnique, material: IGLTFMaterial, unTreatedUniforms: { [key: string]: IGLTFTechniqueParameter }) => {\r\n var materialValues = material.values || technique.parameters;\r\n var techniqueUniforms = technique.uniforms;\r\n\r\n /**\r\n * Prepare values here (not matrices)\r\n */\r\n for (var unif in unTreatedUniforms) {\r\n var uniform: IGLTFTechniqueParameter = unTreatedUniforms[unif];\r\n var type = uniform.type;\r\n var value = (materialValues)[techniqueUniforms[unif]];\r\n\r\n if (value === undefined) {\r\n // In case the value is the same for all materials\r\n value = uniform.value;\r\n }\r\n\r\n if (!value) {\r\n continue;\r\n }\r\n\r\n var onLoadTexture = (uniformName: Nullable) => {\r\n return (texture: Texture) => {\r\n if (uniform.value && uniformName) {\r\n // Static uniform\r\n shaderMaterial.setTexture(uniformName, texture);\r\n delete unTreatedUniforms[uniformName];\r\n }\r\n };\r\n };\r\n\r\n // Texture (sampler2D)\r\n if (type === EParameterType.SAMPLER_2D) {\r\n GLTFLoaderExtension.LoadTextureAsync(gltfRuntime, material.values ? value : uniform.value, onLoadTexture(unif), () => onLoadTexture(null));\r\n }\r\n // Others\r\n else {\r\n if (uniform.value && GLTFUtils.SetUniform(shaderMaterial, unif, material.values ? value : uniform.value, type)) {\r\n // Static uniform\r\n delete unTreatedUniforms[unif];\r\n }\r\n }\r\n }\r\n};\r\n\r\n/**\r\n* Shader compilation failed\r\n*/\r\nvar onShaderCompileError = (program: IGLTFProgram, shaderMaterial: ShaderMaterial, onError: (message: string) => void) => {\r\n return (effect: Effect, error: string) => {\r\n shaderMaterial.dispose(true);\r\n onError(\"Cannot compile program named \" + program.name + \". Error: \" + error + \". Default material will be applied\");\r\n };\r\n};\r\n\r\n/**\r\n* Shader compilation success\r\n*/\r\nvar onShaderCompileSuccess = (gltfRuntime: IGLTFRuntime, shaderMaterial: ShaderMaterial, technique: IGLTFTechnique, material: IGLTFMaterial, unTreatedUniforms: { [key: string]: IGLTFTechniqueParameter }, onSuccess: (shaderMaterial: ShaderMaterial) => void) => {\r\n return (_: Effect) => {\r\n prepareShaderMaterialUniforms(gltfRuntime, shaderMaterial, technique, material, unTreatedUniforms);\r\n\r\n shaderMaterial.onBind = (mesh: AbstractMesh) => {\r\n onBindShaderMaterial(mesh, gltfRuntime, unTreatedUniforms, shaderMaterial, technique, material, onSuccess);\r\n };\r\n };\r\n};\r\n\r\n/**\r\n* Returns the appropriate uniform if already handled by babylon\r\n*/\r\nvar parseShaderUniforms = (tokenizer: Tokenizer, technique: IGLTFTechnique, unTreatedUniforms: { [key: string]: IGLTFTechniqueParameter }): string => {\r\n for (var unif in technique.uniforms) {\r\n var uniform = technique.uniforms[unif];\r\n var uniformParameter: IGLTFTechniqueParameter = technique.parameters[uniform];\r\n\r\n if (tokenizer.currentIdentifier === unif) {\r\n if (uniformParameter.semantic && !uniformParameter.source && !uniformParameter.node) {\r\n var transformIndex = glTFTransforms.indexOf(uniformParameter.semantic);\r\n\r\n if (transformIndex !== -1) {\r\n delete unTreatedUniforms[unif];\r\n return babylonTransforms[transformIndex];\r\n }\r\n }\r\n }\r\n }\r\n\r\n return tokenizer.currentIdentifier;\r\n};\r\n\r\n/**\r\n* All shaders loaded. Create materials one by one\r\n*/\r\nvar importMaterials = (gltfRuntime: IGLTFRuntime) => {\r\n // Create materials\r\n for (var mat in gltfRuntime.materials) {\r\n GLTFLoaderExtension.LoadMaterialAsync(gltfRuntime, mat, (material: Material) => { }, () => { });\r\n }\r\n};\r\n\r\n/**\r\n* Implementation of the base glTF spec\r\n* @hidden\r\n*/\r\nexport class GLTFLoaderBase {\r\n public static CreateRuntime(parsedData: any, scene: Scene, rootUrl: string): IGLTFRuntime {\r\n var gltfRuntime: IGLTFRuntime = {\r\n extensions: {},\r\n accessors: {},\r\n buffers: {},\r\n bufferViews: {},\r\n meshes: {},\r\n lights: {},\r\n cameras: {},\r\n nodes: {},\r\n images: {},\r\n textures: {},\r\n shaders: {},\r\n programs: {},\r\n samplers: {},\r\n techniques: {},\r\n materials: {},\r\n animations: {},\r\n skins: {},\r\n extensionsUsed: [],\r\n\r\n scenes: {},\r\n\r\n buffersCount: 0,\r\n shaderscount: 0,\r\n\r\n scene: scene,\r\n rootUrl: rootUrl,\r\n\r\n loadedBufferCount: 0,\r\n loadedBufferViews: {},\r\n\r\n loadedShaderCount: 0,\r\n\r\n importOnlyMeshes: false,\r\n\r\n dummyNodes: [],\r\n\r\n forAssetContainer: false\r\n };\r\n\r\n // Parse\r\n if (parsedData.extensions) {\r\n parseObject(parsedData.extensions, \"extensions\", gltfRuntime);\r\n }\r\n\r\n if (parsedData.extensionsUsed) {\r\n parseObject(parsedData.extensionsUsed, \"extensionsUsed\", gltfRuntime);\r\n }\r\n\r\n if (parsedData.buffers) {\r\n parseBuffers(parsedData.buffers, gltfRuntime);\r\n }\r\n\r\n if (parsedData.bufferViews) {\r\n parseObject(parsedData.bufferViews, \"bufferViews\", gltfRuntime);\r\n }\r\n\r\n if (parsedData.accessors) {\r\n parseObject(parsedData.accessors, \"accessors\", gltfRuntime);\r\n }\r\n\r\n if (parsedData.meshes) {\r\n parseObject(parsedData.meshes, \"meshes\", gltfRuntime);\r\n }\r\n\r\n if (parsedData.lights) {\r\n parseObject(parsedData.lights, \"lights\", gltfRuntime);\r\n }\r\n\r\n if (parsedData.cameras) {\r\n parseObject(parsedData.cameras, \"cameras\", gltfRuntime);\r\n }\r\n\r\n if (parsedData.nodes) {\r\n parseObject(parsedData.nodes, \"nodes\", gltfRuntime);\r\n }\r\n\r\n if (parsedData.images) {\r\n parseObject(parsedData.images, \"images\", gltfRuntime);\r\n }\r\n\r\n if (parsedData.textures) {\r\n parseObject(parsedData.textures, \"textures\", gltfRuntime);\r\n }\r\n\r\n if (parsedData.shaders) {\r\n parseShaders(parsedData.shaders, gltfRuntime);\r\n }\r\n\r\n if (parsedData.programs) {\r\n parseObject(parsedData.programs, \"programs\", gltfRuntime);\r\n }\r\n\r\n if (parsedData.samplers) {\r\n parseObject(parsedData.samplers, \"samplers\", gltfRuntime);\r\n }\r\n\r\n if (parsedData.techniques) {\r\n parseObject(parsedData.techniques, \"techniques\", gltfRuntime);\r\n }\r\n\r\n if (parsedData.materials) {\r\n parseObject(parsedData.materials, \"materials\", gltfRuntime);\r\n }\r\n\r\n if (parsedData.animations) {\r\n parseObject(parsedData.animations, \"animations\", gltfRuntime);\r\n }\r\n\r\n if (parsedData.skins) {\r\n parseObject(parsedData.skins, \"skins\", gltfRuntime);\r\n }\r\n\r\n if (parsedData.scenes) {\r\n gltfRuntime.scenes = parsedData.scenes;\r\n }\r\n\r\n if (parsedData.scene && parsedData.scenes) {\r\n gltfRuntime.currentScene = parsedData.scenes[parsedData.scene];\r\n }\r\n\r\n return gltfRuntime;\r\n }\r\n\r\n public static LoadBufferAsync(gltfRuntime: IGLTFRuntime, id: string, onSuccess: (buffer: ArrayBufferView) => void, onError: (message: string) => void, onProgress?: () => void): void {\r\n var buffer: IGLTFBuffer = gltfRuntime.buffers[id];\r\n\r\n if (Tools.IsBase64(buffer.uri)) {\r\n setTimeout(() => onSuccess(new Uint8Array(Tools.DecodeBase64(buffer.uri))));\r\n }\r\n else {\r\n Tools.LoadFile(gltfRuntime.rootUrl + buffer.uri, (data) => onSuccess(new Uint8Array(data as ArrayBuffer)), onProgress, undefined, true, (request) => {\r\n if (request) {\r\n onError(request.status + \" \" + request.statusText);\r\n }\r\n });\r\n }\r\n }\r\n\r\n public static LoadTextureBufferAsync(gltfRuntime: IGLTFRuntime, id: string, onSuccess: (buffer: Nullable) => void, onError: (message: string) => void): void {\r\n var texture: IGLTFTexture = gltfRuntime.textures[id];\r\n\r\n if (!texture || !texture.source) {\r\n onError(\"\");\r\n return;\r\n }\r\n\r\n if (texture.babylonTexture) {\r\n onSuccess(null);\r\n return;\r\n }\r\n\r\n var source: IGLTFImage = gltfRuntime.images[texture.source];\r\n\r\n if (Tools.IsBase64(source.uri)) {\r\n setTimeout(() => onSuccess(new Uint8Array(Tools.DecodeBase64(source.uri))));\r\n }\r\n else {\r\n Tools.LoadFile(gltfRuntime.rootUrl + source.uri, (data) => onSuccess(new Uint8Array(data as ArrayBuffer)), undefined, undefined, true, (request) => {\r\n if (request) {\r\n onError(request.status + \" \" + request.statusText);\r\n }\r\n });\r\n }\r\n }\r\n\r\n public static CreateTextureAsync(gltfRuntime: IGLTFRuntime, id: string, buffer: Nullable, onSuccess: (texture: Texture) => void, onError: (message: string) => void): void {\r\n var texture: IGLTFTexture = gltfRuntime.textures[id];\r\n\r\n if (texture.babylonTexture) {\r\n onSuccess(texture.babylonTexture);\r\n return;\r\n }\r\n\r\n var sampler: IGLTFSampler = gltfRuntime.samplers[texture.sampler];\r\n\r\n var createMipMaps =\r\n (sampler.minFilter === ETextureFilterType.NEAREST_MIPMAP_NEAREST) ||\r\n (sampler.minFilter === ETextureFilterType.NEAREST_MIPMAP_LINEAR) ||\r\n (sampler.minFilter === ETextureFilterType.LINEAR_MIPMAP_NEAREST) ||\r\n (sampler.minFilter === ETextureFilterType.LINEAR_MIPMAP_LINEAR);\r\n\r\n var samplingMode = Texture.BILINEAR_SAMPLINGMODE;\r\n\r\n var blob = buffer == null ? new Blob() : new Blob([buffer]);\r\n var blobURL = URL.createObjectURL(blob);\r\n var revokeBlobURL = () => URL.revokeObjectURL(blobURL);\r\n var newTexture = new Texture(blobURL, gltfRuntime.scene, !createMipMaps, true, samplingMode, revokeBlobURL, revokeBlobURL);\r\n if (sampler.wrapS !== undefined) {\r\n newTexture.wrapU = GLTFUtils.GetWrapMode(sampler.wrapS);\r\n }\r\n if (sampler.wrapT !== undefined) {\r\n newTexture.wrapV = GLTFUtils.GetWrapMode(sampler.wrapT);\r\n }\r\n newTexture.name = id;\r\n\r\n texture.babylonTexture = newTexture;\r\n onSuccess(newTexture);\r\n }\r\n\r\n public static LoadShaderStringAsync(gltfRuntime: IGLTFRuntime, id: string, onSuccess: (shaderString: string | ArrayBuffer) => void, onError?: (message: string) => void): void {\r\n var shader: IGLTFShader = gltfRuntime.shaders[id];\r\n\r\n if (Tools.IsBase64(shader.uri)) {\r\n var shaderString = atob(shader.uri.split(\",\")[1]);\r\n if (onSuccess) {\r\n onSuccess(shaderString);\r\n }\r\n }\r\n else {\r\n Tools.LoadFile(gltfRuntime.rootUrl + shader.uri, onSuccess, undefined, undefined, false, (request) => {\r\n if (request && onError) {\r\n onError(request.status + \" \" + request.statusText);\r\n }\r\n });\r\n }\r\n }\r\n\r\n public static LoadMaterialAsync(gltfRuntime: IGLTFRuntime, id: string, onSuccess: (material: Material) => void, onError: (message: string) => void): void {\r\n var material: IGLTFMaterial = gltfRuntime.materials[id];\r\n if (!material.technique) {\r\n if (onError) {\r\n onError(\"No technique found.\");\r\n }\r\n return;\r\n }\r\n\r\n var technique: IGLTFTechnique = gltfRuntime.techniques[material.technique];\r\n if (!technique) {\r\n gltfRuntime.scene._blockEntityCollection = gltfRuntime.forAssetContainer;\r\n var defaultMaterial = new StandardMaterial(id, gltfRuntime.scene);\r\n gltfRuntime.scene._blockEntityCollection = false;\r\n defaultMaterial.diffuseColor = new Color3(0.5, 0.5, 0.5);\r\n defaultMaterial.sideOrientation = Material.CounterClockWiseSideOrientation;\r\n onSuccess(defaultMaterial);\r\n return;\r\n }\r\n\r\n var program: IGLTFProgram = gltfRuntime.programs[technique.program];\r\n var states: IGLTFTechniqueStates = technique.states;\r\n\r\n var vertexShader: string = Effect.ShadersStore[program.vertexShader + \"VertexShader\"];\r\n var pixelShader: string = Effect.ShadersStore[program.fragmentShader + \"PixelShader\"];\r\n var newVertexShader = \"\";\r\n var newPixelShader = \"\";\r\n\r\n var vertexTokenizer = new Tokenizer(vertexShader);\r\n var pixelTokenizer = new Tokenizer(pixelShader);\r\n\r\n var unTreatedUniforms: { [key: string]: IGLTFTechniqueParameter } = {};\r\n var uniforms: string[] = [];\r\n var attributes: string[] = [];\r\n var samplers: string[] = [];\r\n\r\n // Fill uniform, sampler2D and attributes\r\n for (var unif in technique.uniforms) {\r\n var uniform = technique.uniforms[unif];\r\n var uniformParameter: IGLTFTechniqueParameter = technique.parameters[uniform];\r\n\r\n unTreatedUniforms[unif] = uniformParameter;\r\n\r\n if (uniformParameter.semantic && !uniformParameter.node && !uniformParameter.source) {\r\n var transformIndex = glTFTransforms.indexOf(uniformParameter.semantic);\r\n if (transformIndex !== -1) {\r\n uniforms.push(babylonTransforms[transformIndex]);\r\n delete unTreatedUniforms[unif];\r\n }\r\n else {\r\n uniforms.push(unif);\r\n }\r\n }\r\n else if (uniformParameter.type === EParameterType.SAMPLER_2D) {\r\n samplers.push(unif);\r\n }\r\n else {\r\n uniforms.push(unif);\r\n }\r\n }\r\n\r\n for (var attr in technique.attributes) {\r\n var attribute = technique.attributes[attr];\r\n var attributeParameter: IGLTFTechniqueParameter = technique.parameters[attribute];\r\n\r\n if (attributeParameter.semantic) {\r\n let name = getAttribute(attributeParameter);\r\n if (name) {\r\n attributes.push(name);\r\n }\r\n }\r\n }\r\n\r\n // Configure vertex shader\r\n while (!vertexTokenizer.isEnd() && vertexTokenizer.getNextToken()) {\r\n var tokenType = vertexTokenizer.currentToken;\r\n\r\n if (tokenType !== ETokenType.IDENTIFIER) {\r\n newVertexShader += vertexTokenizer.currentString;\r\n continue;\r\n }\r\n\r\n var foundAttribute = false;\r\n\r\n for (var attr in technique.attributes) {\r\n var attribute = technique.attributes[attr];\r\n var attributeParameter: IGLTFTechniqueParameter = technique.parameters[attribute];\r\n\r\n if (vertexTokenizer.currentIdentifier === attr && attributeParameter.semantic) {\r\n newVertexShader += getAttribute(attributeParameter);\r\n foundAttribute = true;\r\n break;\r\n }\r\n }\r\n\r\n if (foundAttribute) {\r\n continue;\r\n }\r\n\r\n newVertexShader += parseShaderUniforms(vertexTokenizer, technique, unTreatedUniforms);\r\n }\r\n\r\n // Configure pixel shader\r\n while (!pixelTokenizer.isEnd() && pixelTokenizer.getNextToken()) {\r\n var tokenType = pixelTokenizer.currentToken;\r\n\r\n if (tokenType !== ETokenType.IDENTIFIER) {\r\n newPixelShader += pixelTokenizer.currentString;\r\n continue;\r\n }\r\n\r\n newPixelShader += parseShaderUniforms(pixelTokenizer, technique, unTreatedUniforms);\r\n }\r\n\r\n // Create shader material\r\n var shaderPath = {\r\n vertex: program.vertexShader + id,\r\n fragment: program.fragmentShader + id\r\n };\r\n\r\n var options = {\r\n attributes: attributes,\r\n uniforms: uniforms,\r\n samplers: samplers,\r\n needAlphaBlending: states && states.enable && states.enable.indexOf(3042) !== -1\r\n };\r\n\r\n Effect.ShadersStore[program.vertexShader + id + \"VertexShader\"] = newVertexShader;\r\n Effect.ShadersStore[program.fragmentShader + id + \"PixelShader\"] = newPixelShader;\r\n\r\n var shaderMaterial = new ShaderMaterial(id, gltfRuntime.scene, shaderPath, options);\r\n shaderMaterial.onError = onShaderCompileError(program, shaderMaterial, onError);\r\n shaderMaterial.onCompiled = onShaderCompileSuccess(gltfRuntime, shaderMaterial, technique, material, unTreatedUniforms, onSuccess);\r\n shaderMaterial.sideOrientation = Material.CounterClockWiseSideOrientation;\r\n\r\n if (states && states.functions) {\r\n var functions = states.functions;\r\n if (functions.cullFace && functions.cullFace[0] !== ECullingType.BACK) {\r\n shaderMaterial.backFaceCulling = false;\r\n }\r\n\r\n var blendFunc = functions.blendFuncSeparate;\r\n if (blendFunc) {\r\n if (blendFunc[0] === EBlendingFunction.SRC_ALPHA && blendFunc[1] === EBlendingFunction.ONE_MINUS_SRC_ALPHA && blendFunc[2] === EBlendingFunction.ONE && blendFunc[3] === EBlendingFunction.ONE) {\r\n shaderMaterial.alphaMode = Constants.ALPHA_COMBINE;\r\n }\r\n else if (blendFunc[0] === EBlendingFunction.ONE && blendFunc[1] === EBlendingFunction.ONE && blendFunc[2] === EBlendingFunction.ZERO && blendFunc[3] === EBlendingFunction.ONE) {\r\n shaderMaterial.alphaMode = Constants.ALPHA_ONEONE;\r\n }\r\n else if (blendFunc[0] === EBlendingFunction.SRC_ALPHA && blendFunc[1] === EBlendingFunction.ONE && blendFunc[2] === EBlendingFunction.ZERO && blendFunc[3] === EBlendingFunction.ONE) {\r\n shaderMaterial.alphaMode = Constants.ALPHA_ADD;\r\n }\r\n else if (blendFunc[0] === EBlendingFunction.ZERO && blendFunc[1] === EBlendingFunction.ONE_MINUS_SRC_COLOR && blendFunc[2] === EBlendingFunction.ONE && blendFunc[3] === EBlendingFunction.ONE) {\r\n shaderMaterial.alphaMode = Constants.ALPHA_SUBTRACT;\r\n }\r\n else if (blendFunc[0] === EBlendingFunction.DST_COLOR && blendFunc[1] === EBlendingFunction.ZERO && blendFunc[2] === EBlendingFunction.ONE && blendFunc[3] === EBlendingFunction.ONE) {\r\n shaderMaterial.alphaMode = Constants.ALPHA_MULTIPLY;\r\n }\r\n else if (blendFunc[0] === EBlendingFunction.SRC_ALPHA && blendFunc[1] === EBlendingFunction.ONE_MINUS_SRC_COLOR && blendFunc[2] === EBlendingFunction.ONE && blendFunc[3] === EBlendingFunction.ONE) {\r\n shaderMaterial.alphaMode = Constants.ALPHA_MAXIMIZED;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n* glTF V1 Loader\r\n* @hidden\r\n*/\r\nexport class GLTFLoader implements IGLTFLoader {\r\n public static Extensions: { [name: string]: GLTFLoaderExtension } = {};\r\n\r\n public static RegisterExtension(extension: GLTFLoaderExtension): void {\r\n if (GLTFLoader.Extensions[extension.name]) {\r\n Tools.Error(\"Tool with the same name \\\"\" + extension.name + \"\\\" already exists\");\r\n return;\r\n }\r\n\r\n GLTFLoader.Extensions[extension.name] = extension;\r\n }\r\n\r\n public state: Nullable = null;\r\n\r\n public dispose(): void {\r\n // do nothing\r\n }\r\n\r\n private _importMeshAsync(meshesNames: any, scene: Scene, data: IGLTFLoaderData, rootUrl: string, forAssetContainer: boolean, onSuccess: (meshes: AbstractMesh[], skeletons: Skeleton[]) => void, onProgress?: (event: ISceneLoaderProgressEvent) => void, onError?: (message: string) => void): boolean {\r\n scene.useRightHandedSystem = true;\r\n\r\n GLTFLoaderExtension.LoadRuntimeAsync(scene, data, rootUrl, (gltfRuntime) => {\r\n gltfRuntime.forAssetContainer = forAssetContainer;\r\n gltfRuntime.importOnlyMeshes = true;\r\n\r\n if (meshesNames === \"\") {\r\n gltfRuntime.importMeshesNames = [];\r\n }\r\n else if (typeof meshesNames === \"string\") {\r\n gltfRuntime.importMeshesNames = [meshesNames];\r\n }\r\n else if (meshesNames && !(meshesNames instanceof Array)) {\r\n gltfRuntime.importMeshesNames = [meshesNames];\r\n }\r\n else {\r\n gltfRuntime.importMeshesNames = [];\r\n Tools.Warn(\"Argument meshesNames must be of type string or string[]\");\r\n }\r\n\r\n // Create nodes\r\n this._createNodes(gltfRuntime);\r\n\r\n var meshes = new Array();\r\n var skeletons = new Array();\r\n\r\n // Fill arrays of meshes and skeletons\r\n for (var nde in gltfRuntime.nodes) {\r\n var node: IGLTFNode = gltfRuntime.nodes[nde];\r\n\r\n if (node.babylonNode instanceof AbstractMesh) {\r\n meshes.push(node.babylonNode);\r\n }\r\n }\r\n\r\n for (var skl in gltfRuntime.skins) {\r\n var skin: IGLTFSkins = gltfRuntime.skins[skl];\r\n\r\n if (skin.babylonSkeleton instanceof Skeleton) {\r\n skeletons.push(skin.babylonSkeleton);\r\n }\r\n }\r\n\r\n // Load buffers, shaders, materials, etc.\r\n this._loadBuffersAsync(gltfRuntime, () => {\r\n this._loadShadersAsync(gltfRuntime, () => {\r\n importMaterials(gltfRuntime);\r\n postLoad(gltfRuntime);\r\n\r\n if (!GLTFFileLoader.IncrementalLoading && onSuccess) {\r\n onSuccess(meshes, skeletons);\r\n }\r\n });\r\n }, onProgress);\r\n\r\n if (GLTFFileLoader.IncrementalLoading && onSuccess) {\r\n onSuccess(meshes, skeletons);\r\n }\r\n }, onError);\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Imports one or more meshes from a loaded gltf file and adds them to the scene\r\n * @param meshesNames a string or array of strings of the mesh names that should be loaded from the file\r\n * @param scene the scene the meshes should be added to\r\n * @param forAssetContainer defines if the entities must be stored in the scene\r\n * @param data gltf data containing information of the meshes in a loaded file\r\n * @param rootUrl root url to load from\r\n * @param onProgress event that fires when loading progress has occured\r\n * @returns a promise containg the loaded meshes, particles, skeletons and animations\r\n */\r\n public importMeshAsync(meshesNames: any, scene: Scene, forAssetContainer: boolean, data: IGLTFLoaderData, rootUrl: string, onProgress?: (event: ISceneLoaderProgressEvent) => void): Promise {\r\n return new Promise((resolve, reject) => {\r\n this._importMeshAsync(meshesNames, scene, data, rootUrl, forAssetContainer, (meshes, skeletons) => {\r\n resolve({\r\n meshes: meshes,\r\n particleSystems: [],\r\n skeletons: skeletons,\r\n animationGroups: [],\r\n lights: [],\r\n transformNodes: []\r\n });\r\n }, onProgress, (message) => {\r\n reject(new Error(message));\r\n });\r\n });\r\n }\r\n\r\n private _loadAsync(scene: Scene, data: IGLTFLoaderData, rootUrl: string, forAssetContainer: boolean, onSuccess: () => void, onProgress?: (event: ISceneLoaderProgressEvent) => void, onError?: (message: string) => void): void {\r\n scene.useRightHandedSystem = true;\r\n\r\n GLTFLoaderExtension.LoadRuntimeAsync(scene, data, rootUrl, (gltfRuntime) => {\r\n // Load runtime extensios\r\n GLTFLoaderExtension.LoadRuntimeExtensionsAsync(gltfRuntime, () => {\r\n // Create nodes\r\n this._createNodes(gltfRuntime);\r\n\r\n // Load buffers, shaders, materials, etc.\r\n this._loadBuffersAsync(gltfRuntime, () => {\r\n this._loadShadersAsync(gltfRuntime, () => {\r\n importMaterials(gltfRuntime);\r\n postLoad(gltfRuntime);\r\n\r\n if (!GLTFFileLoader.IncrementalLoading) {\r\n onSuccess();\r\n }\r\n });\r\n });\r\n\r\n if (GLTFFileLoader.IncrementalLoading) {\r\n onSuccess();\r\n }\r\n }, onError);\r\n }, onError);\r\n }\r\n\r\n /**\r\n * Imports all objects from a loaded gltf file and adds them to the scene\r\n * @param scene the scene the objects should be added to\r\n * @param data gltf data containing information of the meshes in a loaded file\r\n * @param rootUrl root url to load from\r\n * @param onProgress event that fires when loading progress has occured\r\n * @returns a promise which completes when objects have been loaded to the scene\r\n */\r\n public loadAsync(scene: Scene, data: IGLTFLoaderData, rootUrl: string, onProgress?: (event: ISceneLoaderProgressEvent) => void): Promise {\r\n return new Promise((resolve, reject) => {\r\n this._loadAsync(scene, data, rootUrl, false, () => {\r\n resolve();\r\n }, onProgress, (message) => {\r\n reject(new Error(message));\r\n });\r\n });\r\n }\r\n\r\n private _loadShadersAsync(gltfRuntime: IGLTFRuntime, onload: () => void): void {\r\n var hasShaders = false;\r\n\r\n var processShader = (sha: string, shader: IGLTFShader) => {\r\n GLTFLoaderExtension.LoadShaderStringAsync(gltfRuntime, sha, (shaderString) => {\r\n if (shaderString instanceof ArrayBuffer) {\r\n return;\r\n }\r\n\r\n gltfRuntime.loadedShaderCount++;\r\n\r\n if (shaderString) {\r\n Effect.ShadersStore[sha + (shader.type === EShaderType.VERTEX ? \"VertexShader\" : \"PixelShader\")] = shaderString;\r\n }\r\n\r\n if (gltfRuntime.loadedShaderCount === gltfRuntime.shaderscount) {\r\n onload();\r\n }\r\n }, () => {\r\n Tools.Error(\"Error when loading shader program named \" + sha + \" located at \" + shader.uri);\r\n });\r\n };\r\n\r\n for (var sha in gltfRuntime.shaders) {\r\n hasShaders = true;\r\n\r\n var shader: IGLTFShader = gltfRuntime.shaders[sha];\r\n if (shader) {\r\n processShader.bind(this, sha, shader)();\r\n }\r\n else {\r\n Tools.Error(\"No shader named: \" + sha);\r\n }\r\n }\r\n\r\n if (!hasShaders) {\r\n onload();\r\n }\r\n }\r\n\r\n private _loadBuffersAsync(gltfRuntime: IGLTFRuntime, onLoad: () => void, onProgress?: (event: ISceneLoaderProgressEvent) => void): void {\r\n var hasBuffers = false;\r\n\r\n var processBuffer = (buf: string, buffer: IGLTFBuffer) => {\r\n GLTFLoaderExtension.LoadBufferAsync(gltfRuntime, buf, (bufferView) => {\r\n gltfRuntime.loadedBufferCount++;\r\n\r\n if (bufferView) {\r\n if (bufferView.byteLength != gltfRuntime.buffers[buf].byteLength) {\r\n Tools.Error(\"Buffer named \" + buf + \" is length \" + bufferView.byteLength + \". Expected: \" + buffer.byteLength); // Improve error message\r\n }\r\n\r\n gltfRuntime.loadedBufferViews[buf] = bufferView;\r\n }\r\n\r\n if (gltfRuntime.loadedBufferCount === gltfRuntime.buffersCount) {\r\n onLoad();\r\n }\r\n }, () => {\r\n Tools.Error(\"Error when loading buffer named \" + buf + \" located at \" + buffer.uri);\r\n });\r\n };\r\n\r\n for (var buf in gltfRuntime.buffers) {\r\n hasBuffers = true;\r\n\r\n var buffer: IGLTFBuffer = gltfRuntime.buffers[buf];\r\n if (buffer) {\r\n processBuffer.bind(this, buf, buffer)();\r\n }\r\n else {\r\n Tools.Error(\"No buffer named: \" + buf);\r\n }\r\n }\r\n\r\n if (!hasBuffers) {\r\n onLoad();\r\n }\r\n }\r\n\r\n private _createNodes(gltfRuntime: IGLTFRuntime): void {\r\n var currentScene = gltfRuntime.currentScene;\r\n\r\n if (currentScene) {\r\n // Only one scene even if multiple scenes are defined\r\n for (var i = 0; i < currentScene.nodes.length; i++) {\r\n traverseNodes(gltfRuntime, currentScene.nodes[i], null);\r\n }\r\n }\r\n else {\r\n // Load all scenes\r\n for (var thing in gltfRuntime.scenes) {\r\n currentScene = gltfRuntime.scenes[thing];\r\n\r\n for (var i = 0; i < currentScene.nodes.length; i++) {\r\n traverseNodes(gltfRuntime, currentScene.nodes[i], null);\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n/** @hidden */\r\nexport abstract class GLTFLoaderExtension {\r\n private _name: string;\r\n\r\n public constructor(name: string) {\r\n this._name = name;\r\n }\r\n\r\n public get name(): string {\r\n return this._name;\r\n }\r\n\r\n /**\r\n * Defines an override for loading the runtime\r\n * Return true to stop further extensions from loading the runtime\r\n */\r\n public loadRuntimeAsync(scene: Scene, data: IGLTFLoaderData, rootUrl: string, onSuccess?: (gltfRuntime: IGLTFRuntime) => void, onError?: (message: string) => void): boolean {\r\n return false;\r\n }\r\n\r\n /**\r\n * Defines an onverride for creating gltf runtime\r\n * Return true to stop further extensions from creating the runtime\r\n */\r\n public loadRuntimeExtensionsAsync(gltfRuntime: IGLTFRuntime, onSuccess: () => void, onError?: (message: string) => void): boolean {\r\n return false;\r\n }\r\n\r\n /**\r\n * Defines an override for loading buffers\r\n * Return true to stop further extensions from loading this buffer\r\n */\r\n public loadBufferAsync(gltfRuntime: IGLTFRuntime, id: string, onSuccess: (buffer: ArrayBufferView) => void, onError: (message: string) => void, onProgress?: () => void): boolean {\r\n return false;\r\n }\r\n\r\n /**\r\n * Defines an override for loading texture buffers\r\n * Return true to stop further extensions from loading this texture data\r\n */\r\n public loadTextureBufferAsync(gltfRuntime: IGLTFRuntime, id: string, onSuccess: (buffer: ArrayBufferView) => void, onError: (message: string) => void): boolean {\r\n return false;\r\n }\r\n\r\n /**\r\n * Defines an override for creating textures\r\n * Return true to stop further extensions from loading this texture\r\n */\r\n public createTextureAsync(gltfRuntime: IGLTFRuntime, id: string, buffer: ArrayBufferView, onSuccess: (texture: Texture) => void, onError: (message: string) => void): boolean {\r\n return false;\r\n }\r\n\r\n /**\r\n * Defines an override for loading shader strings\r\n * Return true to stop further extensions from loading this shader data\r\n */\r\n public loadShaderStringAsync(gltfRuntime: IGLTFRuntime, id: string, onSuccess: (shaderString: string) => void, onError: (message: string) => void): boolean {\r\n return false;\r\n }\r\n\r\n /**\r\n * Defines an override for loading materials\r\n * Return true to stop further extensions from loading this material\r\n */\r\n public loadMaterialAsync(gltfRuntime: IGLTFRuntime, id: string, onSuccess: (material: Material) => void, onError: (message: string) => void): boolean {\r\n return false;\r\n }\r\n\r\n // ---------\r\n // Utilities\r\n // ---------\r\n\r\n public static LoadRuntimeAsync(scene: Scene, data: IGLTFLoaderData, rootUrl: string, onSuccess?: (gltfRuntime: IGLTFRuntime) => void, onError?: (message: string) => void): void {\r\n GLTFLoaderExtension.ApplyExtensions((loaderExtension) => {\r\n return loaderExtension.loadRuntimeAsync(scene, data, rootUrl, onSuccess, onError);\r\n }, () => {\r\n setTimeout(() => {\r\n if (!onSuccess) {\r\n return;\r\n }\r\n onSuccess(GLTFLoaderBase.CreateRuntime(data.json, scene, rootUrl));\r\n });\r\n });\r\n }\r\n\r\n public static LoadRuntimeExtensionsAsync(gltfRuntime: IGLTFRuntime, onSuccess: () => void, onError?: (message: string) => void): void {\r\n GLTFLoaderExtension.ApplyExtensions((loaderExtension) => {\r\n return loaderExtension.loadRuntimeExtensionsAsync(gltfRuntime, onSuccess, onError);\r\n }, () => {\r\n setTimeout(() => {\r\n onSuccess();\r\n });\r\n });\r\n }\r\n\r\n public static LoadBufferAsync(gltfRuntime: IGLTFRuntime, id: string, onSuccess: (bufferView: ArrayBufferView) => void, onError: (message: string) => void, onProgress?: () => void): void {\r\n GLTFLoaderExtension.ApplyExtensions((loaderExtension) => {\r\n return loaderExtension.loadBufferAsync(gltfRuntime, id, onSuccess, onError, onProgress);\r\n }, () => {\r\n GLTFLoaderBase.LoadBufferAsync(gltfRuntime, id, onSuccess, onError, onProgress);\r\n });\r\n }\r\n\r\n public static LoadTextureAsync(gltfRuntime: IGLTFRuntime, id: string, onSuccess: (texture: Texture) => void, onError: (message: string) => void): void {\r\n GLTFLoaderExtension.LoadTextureBufferAsync(gltfRuntime, id,\r\n (buffer) => {\r\n if (buffer) {\r\n GLTFLoaderExtension.CreateTextureAsync(gltfRuntime, id, buffer, onSuccess, onError);\r\n }\r\n }, onError);\r\n }\r\n\r\n public static LoadShaderStringAsync(gltfRuntime: IGLTFRuntime, id: string, onSuccess: (shaderData: string | ArrayBuffer) => void, onError: (message: string) => void): void {\r\n GLTFLoaderExtension.ApplyExtensions((loaderExtension) => {\r\n return loaderExtension.loadShaderStringAsync(gltfRuntime, id, onSuccess, onError);\r\n }, () => {\r\n GLTFLoaderBase.LoadShaderStringAsync(gltfRuntime, id, onSuccess, onError);\r\n });\r\n }\r\n\r\n public static LoadMaterialAsync(gltfRuntime: IGLTFRuntime, id: string, onSuccess: (material: Material) => void, onError: (message: string) => void): void {\r\n GLTFLoaderExtension.ApplyExtensions((loaderExtension) => {\r\n return loaderExtension.loadMaterialAsync(gltfRuntime, id, onSuccess, onError);\r\n }, () => {\r\n GLTFLoaderBase.LoadMaterialAsync(gltfRuntime, id, onSuccess, onError);\r\n });\r\n }\r\n\r\n private static LoadTextureBufferAsync(gltfRuntime: IGLTFRuntime, id: string, onSuccess: (buffer: Nullable) => void, onError: (message: string) => void): void {\r\n GLTFLoaderExtension.ApplyExtensions((loaderExtension) => {\r\n return loaderExtension.loadTextureBufferAsync(gltfRuntime, id, onSuccess, onError);\r\n }, () => {\r\n GLTFLoaderBase.LoadTextureBufferAsync(gltfRuntime, id, onSuccess, onError);\r\n });\r\n }\r\n\r\n private static CreateTextureAsync(gltfRuntime: IGLTFRuntime, id: string, buffer: ArrayBufferView, onSuccess: (texture: Texture) => void, onError: (message: string) => void): void {\r\n GLTFLoaderExtension.ApplyExtensions((loaderExtension) => {\r\n return loaderExtension.createTextureAsync(gltfRuntime, id, buffer, onSuccess, onError);\r\n }, () => {\r\n GLTFLoaderBase.CreateTextureAsync(gltfRuntime, id, buffer, onSuccess, onError);\r\n });\r\n }\r\n\r\n private static ApplyExtensions(func: (loaderExtension: GLTFLoaderExtension) => boolean, defaultFunc: () => void): void {\r\n for (var extensionName in GLTFLoader.Extensions) {\r\n var loaderExtension = GLTFLoader.Extensions[extensionName];\r\n if (func(loaderExtension)) {\r\n return;\r\n }\r\n }\r\n\r\n defaultFunc();\r\n }\r\n}\r\n\r\nGLTFFileLoader._CreateGLTF1Loader = () => new GLTFLoader();\r\n","import { Bone } from \"babylonjs/Bones/bone\";\r\nimport { Skeleton } from \"babylonjs/Bones/skeleton\";\r\nimport { Texture } from \"babylonjs/Materials/Textures/texture\";\r\nimport { Node } from \"babylonjs/node\";\r\nimport { Scene } from \"babylonjs/scene\";\r\n\r\n/**\r\n* Enums\r\n* @hidden\r\n*/\r\nexport enum EComponentType {\r\n BYTE = 5120,\r\n UNSIGNED_BYTE = 5121,\r\n SHORT = 5122,\r\n UNSIGNED_SHORT = 5123,\r\n FLOAT = 5126\r\n}\r\n\r\n/** @hidden */\r\nexport enum EShaderType {\r\n FRAGMENT = 35632,\r\n VERTEX = 35633\r\n}\r\n\r\n/** @hidden */\r\nexport enum EParameterType {\r\n BYTE = 5120,\r\n UNSIGNED_BYTE = 5121,\r\n SHORT = 5122,\r\n UNSIGNED_SHORT = 5123,\r\n INT = 5124,\r\n UNSIGNED_INT = 5125,\r\n FLOAT = 5126,\r\n FLOAT_VEC2 = 35664,\r\n FLOAT_VEC3 = 35665,\r\n FLOAT_VEC4 = 35666,\r\n INT_VEC2 = 35667,\r\n INT_VEC3 = 35668,\r\n INT_VEC4 = 35669,\r\n BOOL = 35670,\r\n BOOL_VEC2 = 35671,\r\n BOOL_VEC3 = 35672,\r\n BOOL_VEC4 = 35673,\r\n FLOAT_MAT2 = 35674,\r\n FLOAT_MAT3 = 35675,\r\n FLOAT_MAT4 = 35676,\r\n SAMPLER_2D = 35678\r\n}\r\n\r\n/** @hidden */\r\nexport enum ETextureWrapMode {\r\n CLAMP_TO_EDGE = 33071,\r\n MIRRORED_REPEAT = 33648,\r\n REPEAT = 10497\r\n}\r\n\r\n/** @hidden */\r\nexport enum ETextureFilterType {\r\n NEAREST = 9728,\r\n LINEAR = 9728,\r\n NEAREST_MIPMAP_NEAREST = 9984,\r\n LINEAR_MIPMAP_NEAREST = 9985,\r\n NEAREST_MIPMAP_LINEAR = 9986,\r\n LINEAR_MIPMAP_LINEAR = 9987\r\n}\r\n\r\n/** @hidden */\r\nexport enum ETextureFormat {\r\n ALPHA = 6406,\r\n RGB = 6407,\r\n RGBA = 6408,\r\n LUMINANCE = 6409,\r\n LUMINANCE_ALPHA = 6410\r\n}\r\n\r\n/** @hidden */\r\nexport enum ECullingType {\r\n FRONT = 1028,\r\n BACK = 1029,\r\n FRONT_AND_BACK = 1032\r\n}\r\n\r\n/** @hidden */\r\nexport enum EBlendingFunction {\r\n ZERO = 0,\r\n ONE = 1,\r\n SRC_COLOR = 768,\r\n ONE_MINUS_SRC_COLOR = 769,\r\n DST_COLOR = 774,\r\n ONE_MINUS_DST_COLOR = 775,\r\n SRC_ALPHA = 770,\r\n ONE_MINUS_SRC_ALPHA = 771,\r\n DST_ALPHA = 772,\r\n ONE_MINUS_DST_ALPHA = 773,\r\n CONSTANT_COLOR = 32769,\r\n ONE_MINUS_CONSTANT_COLOR = 32770,\r\n CONSTANT_ALPHA = 32771,\r\n ONE_MINUS_CONSTANT_ALPHA = 32772,\r\n SRC_ALPHA_SATURATE = 776\r\n}\r\n\r\n/** @hidden */\r\nexport interface IGLTFProperty {\r\n extensions?: { [key: string]: any };\r\n extras?: Object;\r\n}\r\n\r\n/** @hidden */\r\nexport interface IGLTFChildRootProperty extends IGLTFProperty {\r\n name?: string;\r\n}\r\n\r\n/** @hidden */\r\nexport interface IGLTFAccessor extends IGLTFChildRootProperty {\r\n bufferView: string;\r\n byteOffset: number;\r\n byteStride: number;\r\n count: number;\r\n type: string;\r\n componentType: EComponentType;\r\n\r\n max?: number[];\r\n min?: number[];\r\n name?: string;\r\n}\r\n\r\n/** @hidden */\r\nexport interface IGLTFBufferView extends IGLTFChildRootProperty {\r\n buffer: string;\r\n byteOffset: number;\r\n byteLength: number;\r\n byteStride: number;\r\n\r\n target?: number;\r\n}\r\n\r\n/** @hidden */\r\nexport interface IGLTFBuffer extends IGLTFChildRootProperty {\r\n uri: string;\r\n\r\n byteLength?: number;\r\n type?: string;\r\n}\r\n\r\n/** @hidden */\r\nexport interface IGLTFShader extends IGLTFChildRootProperty {\r\n uri: string;\r\n type: EShaderType;\r\n}\r\n\r\n/** @hidden */\r\nexport interface IGLTFProgram extends IGLTFChildRootProperty {\r\n attributes: string[];\r\n fragmentShader: string;\r\n vertexShader: string;\r\n}\r\n\r\n/** @hidden */\r\nexport interface IGLTFTechniqueParameter {\r\n type: number;\r\n\r\n count?: number;\r\n semantic?: string;\r\n node?: string;\r\n value?: number | boolean | string | Array;\r\n source?: string;\r\n\r\n babylonValue?: any;\r\n}\r\n\r\n/** @hidden */\r\nexport interface IGLTFTechniqueCommonProfile {\r\n lightingModel: string;\r\n texcoordBindings: Object;\r\n\r\n parameters?: Array;\r\n}\r\n\r\n/** @hidden */\r\nexport interface IGLTFTechniqueStatesFunctions {\r\n blendColor?: number[];\r\n blendEquationSeparate?: number[];\r\n blendFuncSeparate?: number[];\r\n colorMask: boolean[];\r\n cullFace: number[];\r\n}\r\n\r\n/** @hidden */\r\nexport interface IGLTFTechniqueStates {\r\n enable: number[];\r\n functions: IGLTFTechniqueStatesFunctions;\r\n}\r\n\r\n/** @hidden */\r\nexport interface IGLTFTechnique extends IGLTFChildRootProperty {\r\n parameters: { [key: string]: IGLTFTechniqueParameter };\r\n program: string;\r\n\r\n attributes: { [key: string]: string };\r\n uniforms: { [key: string]: string };\r\n states: IGLTFTechniqueStates;\r\n}\r\n\r\n/** @hidden */\r\nexport interface IGLTFMaterial extends IGLTFChildRootProperty {\r\n technique?: string;\r\n values: string[];\r\n}\r\n\r\n/** @hidden */\r\nexport interface IGLTFMeshPrimitive extends IGLTFProperty {\r\n attributes: { [key: string]: string };\r\n indices: string;\r\n material: string;\r\n\r\n mode?: number;\r\n}\r\n\r\n/** @hidden */\r\nexport interface IGLTFMesh extends IGLTFChildRootProperty {\r\n primitives: IGLTFMeshPrimitive[];\r\n}\r\n\r\n/** @hidden */\r\nexport interface IGLTFImage extends IGLTFChildRootProperty {\r\n uri: string;\r\n}\r\n\r\n/** @hidden */\r\nexport interface IGLTFSampler extends IGLTFChildRootProperty {\r\n magFilter?: number;\r\n minFilter?: number;\r\n wrapS?: number;\r\n wrapT?: number;\r\n}\r\n\r\n/** @hidden */\r\nexport interface IGLTFTexture extends IGLTFChildRootProperty {\r\n sampler: string;\r\n source: string;\r\n\r\n format?: ETextureFormat;\r\n internalFormat?: ETextureFormat;\r\n target?: number;\r\n type?: number;\r\n\r\n // Babylon.js values (optimize)\r\n babylonTexture?: Texture;\r\n}\r\n\r\n/** @hidden */\r\nexport interface IGLTFAmbienLight {\r\n color?: number[];\r\n}\r\n\r\n/** @hidden */\r\nexport interface IGLTFDirectionalLight {\r\n color?: number[];\r\n}\r\n\r\n/** @hidden */\r\nexport interface IGLTFPointLight {\r\n color?: number[];\r\n constantAttenuation?: number;\r\n linearAttenuation?: number;\r\n quadraticAttenuation?: number;\r\n}\r\n\r\n/** @hidden */\r\nexport interface IGLTFSpotLight {\r\n color?: number[];\r\n constantAttenuation?: number;\r\n fallOfAngle?: number;\r\n fallOffExponent?: number;\r\n linearAttenuation?: number;\r\n quadraticAttenuation?: number;\r\n}\r\n\r\n/** @hidden */\r\nexport interface IGLTFLight extends IGLTFChildRootProperty {\r\n type: string;\r\n}\r\n\r\n/** @hidden */\r\nexport interface IGLTFCameraOrthographic {\r\n xmag: number;\r\n ymag: number;\r\n zfar: number;\r\n znear: number;\r\n}\r\n\r\n/** @hidden */\r\nexport interface IGLTFCameraPerspective {\r\n aspectRatio: number;\r\n yfov: number;\r\n zfar: number;\r\n znear: number;\r\n}\r\n\r\n/** @hidden */\r\nexport interface IGLTFCamera extends IGLTFChildRootProperty {\r\n type: string;\r\n}\r\n\r\n/** @hidden */\r\nexport interface IGLTFAnimationChannelTarget {\r\n id: string;\r\n path: string;\r\n}\r\n\r\n/** @hidden */\r\nexport interface IGLTFAnimationChannel {\r\n sampler: string;\r\n target: IGLTFAnimationChannelTarget;\r\n}\r\n\r\n/** @hidden */\r\nexport interface IGLTFAnimationSampler {\r\n input: string;\r\n output: string;\r\n\r\n interpolation?: string;\r\n}\r\n\r\n/** @hidden */\r\nexport interface IGLTFAnimation extends IGLTFChildRootProperty {\r\n channels?: IGLTFAnimationChannel[];\r\n parameters?: { [key: string]: string };\r\n samplers?: { [key: string]: IGLTFAnimationSampler };\r\n}\r\n\r\n/** @hidden */\r\nexport interface IGLTFNodeInstanceSkin {\r\n skeletons: string[];\r\n skin: string;\r\n meshes: string[];\r\n}\r\n\r\n/** @hidden */\r\nexport interface IGLTFSkins extends IGLTFChildRootProperty {\r\n bindShapeMatrix: number[];\r\n inverseBindMatrices: string;\r\n jointNames: string[];\r\n\r\n babylonSkeleton?: Skeleton;\r\n}\r\n\r\n/** @hidden */\r\nexport interface IGLTFNode extends IGLTFChildRootProperty {\r\n camera?: string;\r\n children: string[];\r\n skin?: string;\r\n jointName?: string;\r\n light?: string;\r\n matrix: number[];\r\n mesh?: string;\r\n meshes?: string[];\r\n rotation?: number[];\r\n scale?: number[];\r\n translation?: number[];\r\n\r\n // Babylon.js values (optimize)\r\n babylonNode?: Node;\r\n}\r\n\r\n/** @hidden */\r\nexport interface IGLTFScene extends IGLTFChildRootProperty {\r\n nodes: string[];\r\n}\r\n\r\n/** @hidden */\r\nexport interface IGLTFRuntime {\r\n extensions: { [key: string]: any };\r\n accessors: { [key: string]: IGLTFAccessor };\r\n buffers: { [key: string]: IGLTFBuffer };\r\n bufferViews: { [key: string]: IGLTFBufferView };\r\n meshes: { [key: string]: IGLTFMesh };\r\n lights: { [key: string]: IGLTFLight };\r\n cameras: { [key: string]: IGLTFCamera };\r\n nodes: { [key: string]: IGLTFNode };\r\n images: { [key: string]: IGLTFImage };\r\n textures: { [key: string]: IGLTFTexture };\r\n shaders: { [key: string]: IGLTFShader };\r\n programs: { [key: string]: IGLTFProgram };\r\n samplers: { [key: string]: IGLTFSampler };\r\n techniques: { [key: string]: IGLTFTechnique };\r\n materials: { [key: string]: IGLTFMaterial };\r\n animations: { [key: string]: IGLTFAnimation };\r\n skins: { [key: string]: IGLTFSkins };\r\n\r\n currentScene?: Object;\r\n scenes: { [key: string]: IGLTFScene }; // v1.1\r\n\r\n extensionsUsed: string[];\r\n extensionsRequired?: string[]; // v1.1\r\n\r\n buffersCount: number;\r\n shaderscount: number;\r\n\r\n scene: Scene;\r\n rootUrl: string;\r\n\r\n loadedBufferCount: number;\r\n loadedBufferViews: { [name: string]: ArrayBufferView };\r\n\r\n loadedShaderCount: number;\r\n\r\n importOnlyMeshes: boolean;\r\n importMeshesNames?: string[];\r\n\r\n dummyNodes: Node[];\r\n\r\n forAssetContainer: boolean;\r\n}\r\n\r\n/** @hidden */\r\nexport interface INodeToRoot {\r\n bone: Bone;\r\n node: IGLTFNode;\r\n id: string;\r\n}\r\n\r\n/** @hidden */\r\nexport interface IJointNode {\r\n node: IGLTFNode;\r\n id: string;\r\n}\r\n","import { IGLTFTechniqueParameter, EParameterType, ETextureWrapMode, IGLTFAccessor, ETextureFilterType, IGLTFRuntime, IGLTFBufferView, EComponentType } from \"./glTFLoaderInterfaces\";\r\n\r\nimport { Nullable } from \"babylonjs/types\";\r\nimport { Vector2, Vector3, Vector4, Matrix } from \"babylonjs/Maths/math.vector\";\r\nimport { Color4 } from 'babylonjs/Maths/math.color';\r\nimport { Effect } from \"babylonjs/Materials/effect\";\r\nimport { ShaderMaterial } from \"babylonjs/Materials/shaderMaterial\";\r\nimport { Texture } from \"babylonjs/Materials/Textures/texture\";\r\nimport { Node } from \"babylonjs/node\";\r\nimport { Scene } from \"babylonjs/scene\";\r\n\r\n/**\r\n* Utils functions for GLTF\r\n* @hidden\r\n*/\r\nexport class GLTFUtils {\r\n /**\r\n * Sets the given \"parameter\" matrix\r\n * @param scene: the Scene object\r\n * @param source: the source node where to pick the matrix\r\n * @param parameter: the GLTF technique parameter\r\n * @param uniformName: the name of the shader's uniform\r\n * @param shaderMaterial: the shader material\r\n */\r\n public static SetMatrix(scene: Scene, source: Node, parameter: IGLTFTechniqueParameter, uniformName: string, shaderMaterial: ShaderMaterial | Effect): void {\r\n var mat: Nullable = null;\r\n\r\n if (parameter.semantic === \"MODEL\") {\r\n mat = source.getWorldMatrix();\r\n }\r\n else if (parameter.semantic === \"PROJECTION\") {\r\n mat = scene.getProjectionMatrix();\r\n }\r\n else if (parameter.semantic === \"VIEW\") {\r\n mat = scene.getViewMatrix();\r\n }\r\n else if (parameter.semantic === \"MODELVIEWINVERSETRANSPOSE\") {\r\n mat = Matrix.Transpose(source.getWorldMatrix().multiply(scene.getViewMatrix()).invert());\r\n }\r\n else if (parameter.semantic === \"MODELVIEW\") {\r\n mat = source.getWorldMatrix().multiply(scene.getViewMatrix());\r\n }\r\n else if (parameter.semantic === \"MODELVIEWPROJECTION\") {\r\n mat = source.getWorldMatrix().multiply(scene.getTransformMatrix());\r\n }\r\n else if (parameter.semantic === \"MODELINVERSE\") {\r\n mat = source.getWorldMatrix().invert();\r\n }\r\n else if (parameter.semantic === \"VIEWINVERSE\") {\r\n mat = scene.getViewMatrix().invert();\r\n }\r\n else if (parameter.semantic === \"PROJECTIONINVERSE\") {\r\n mat = scene.getProjectionMatrix().invert();\r\n }\r\n else if (parameter.semantic === \"MODELVIEWINVERSE\") {\r\n mat = source.getWorldMatrix().multiply(scene.getViewMatrix()).invert();\r\n }\r\n else if (parameter.semantic === \"MODELVIEWPROJECTIONINVERSE\") {\r\n mat = source.getWorldMatrix().multiply(scene.getTransformMatrix()).invert();\r\n }\r\n else if (parameter.semantic === \"MODELINVERSETRANSPOSE\") {\r\n mat = Matrix.Transpose(source.getWorldMatrix().invert());\r\n }\r\n else {\r\n debugger;\r\n }\r\n\r\n if (mat) {\r\n switch (parameter.type) {\r\n case EParameterType.FLOAT_MAT2: shaderMaterial.setMatrix2x2(uniformName, Matrix.GetAsMatrix2x2(mat)); break;\r\n case EParameterType.FLOAT_MAT3: shaderMaterial.setMatrix3x3(uniformName, Matrix.GetAsMatrix3x3(mat)); break;\r\n case EParameterType.FLOAT_MAT4: shaderMaterial.setMatrix(uniformName, mat); break;\r\n default: break;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Sets the given \"parameter\" matrix\r\n * @param shaderMaterial: the shader material\r\n * @param uniform: the name of the shader's uniform\r\n * @param value: the value of the uniform\r\n * @param type: the uniform's type (EParameterType FLOAT, VEC2, VEC3 or VEC4)\r\n */\r\n public static SetUniform(shaderMaterial: ShaderMaterial | Effect, uniform: string, value: any, type: number): boolean {\r\n switch (type) {\r\n case EParameterType.FLOAT: shaderMaterial.setFloat(uniform, value); return true;\r\n case EParameterType.FLOAT_VEC2: shaderMaterial.setVector2(uniform, Vector2.FromArray(value)); return true;\r\n case EParameterType.FLOAT_VEC3: shaderMaterial.setVector3(uniform, Vector3.FromArray(value)); return true;\r\n case EParameterType.FLOAT_VEC4: shaderMaterial.setVector4(uniform, Vector4.FromArray(value)); return true;\r\n default: return false;\r\n }\r\n }\r\n\r\n /**\r\n * Returns the wrap mode of the texture\r\n * @param mode: the mode value\r\n */\r\n public static GetWrapMode(mode: number): number {\r\n switch (mode) {\r\n case ETextureWrapMode.CLAMP_TO_EDGE: return Texture.CLAMP_ADDRESSMODE;\r\n case ETextureWrapMode.MIRRORED_REPEAT: return Texture.MIRROR_ADDRESSMODE;\r\n case ETextureWrapMode.REPEAT: return Texture.WRAP_ADDRESSMODE;\r\n default: return Texture.WRAP_ADDRESSMODE;\r\n }\r\n }\r\n\r\n /**\r\n * Returns the byte stride giving an accessor\r\n * @param accessor: the GLTF accessor objet\r\n */\r\n public static GetByteStrideFromType(accessor: IGLTFAccessor): number {\r\n // Needs this function since \"byteStride\" isn't requiered in glTF format\r\n var type = accessor.type;\r\n\r\n switch (type) {\r\n case \"VEC2\": return 2;\r\n case \"VEC3\": return 3;\r\n case \"VEC4\": return 4;\r\n case \"MAT2\": return 4;\r\n case \"MAT3\": return 9;\r\n case \"MAT4\": return 16;\r\n default: return 1;\r\n }\r\n }\r\n\r\n /**\r\n * Returns the texture filter mode giving a mode value\r\n * @param mode: the filter mode value\r\n */\r\n public static GetTextureFilterMode(mode: number): ETextureFilterType {\r\n switch (mode) {\r\n case ETextureFilterType.LINEAR:\r\n case ETextureFilterType.LINEAR_MIPMAP_NEAREST:\r\n case ETextureFilterType.LINEAR_MIPMAP_LINEAR: return Texture.TRILINEAR_SAMPLINGMODE;\r\n case ETextureFilterType.NEAREST:\r\n case ETextureFilterType.NEAREST_MIPMAP_NEAREST: return Texture.NEAREST_SAMPLINGMODE;\r\n default: return Texture.BILINEAR_SAMPLINGMODE;\r\n }\r\n }\r\n\r\n public static GetBufferFromBufferView(gltfRuntime: IGLTFRuntime, bufferView: IGLTFBufferView, byteOffset: number, byteLength: number, componentType: EComponentType): ArrayBufferView {\r\n var byteOffset = bufferView.byteOffset + byteOffset;\r\n\r\n var loadedBufferView = gltfRuntime.loadedBufferViews[bufferView.buffer];\r\n if (byteOffset + byteLength > loadedBufferView.byteLength) {\r\n throw new Error(\"Buffer access is out of range\");\r\n }\r\n\r\n var buffer = loadedBufferView.buffer;\r\n byteOffset += loadedBufferView.byteOffset;\r\n\r\n switch (componentType) {\r\n case EComponentType.BYTE: return new Int8Array(buffer, byteOffset, byteLength);\r\n case EComponentType.UNSIGNED_BYTE: return new Uint8Array(buffer, byteOffset, byteLength);\r\n case EComponentType.SHORT: return new Int16Array(buffer, byteOffset, byteLength);\r\n case EComponentType.UNSIGNED_SHORT: return new Uint16Array(buffer, byteOffset, byteLength);\r\n default: return new Float32Array(buffer, byteOffset, byteLength);\r\n }\r\n }\r\n\r\n /**\r\n * Returns a buffer from its accessor\r\n * @param gltfRuntime: the GLTF runtime\r\n * @param accessor: the GLTF accessor\r\n */\r\n public static GetBufferFromAccessor(gltfRuntime: IGLTFRuntime, accessor: IGLTFAccessor): any {\r\n var bufferView: IGLTFBufferView = gltfRuntime.bufferViews[accessor.bufferView];\r\n var byteLength = accessor.count * GLTFUtils.GetByteStrideFromType(accessor);\r\n return GLTFUtils.GetBufferFromBufferView(gltfRuntime, bufferView, accessor.byteOffset, byteLength, accessor.componentType);\r\n }\r\n\r\n /**\r\n * Decodes a buffer view into a string\r\n * @param view: the buffer view\r\n */\r\n public static DecodeBufferToText(view: ArrayBufferView): string {\r\n var result = \"\";\r\n var length = view.byteLength;\r\n\r\n for (var i = 0; i < length; ++i) {\r\n result += String.fromCharCode((view)[i]);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Returns the default material of gltf. Related to\r\n * https://github.com/KhronosGroup/glTF/tree/master/specification/1.0#appendix-a-default-material\r\n * @param scene: the Babylon.js scene\r\n */\r\n public static GetDefaultMaterial(scene: Scene): ShaderMaterial {\r\n if (!GLTFUtils._DefaultMaterial) {\r\n Effect.ShadersStore[\"GLTFDefaultMaterialVertexShader\"] = [\r\n \"precision highp float;\",\r\n \"\",\r\n \"uniform mat4 worldView;\",\r\n \"uniform mat4 projection;\",\r\n \"\",\r\n \"attribute vec3 position;\",\r\n \"\",\r\n \"void main(void)\",\r\n \"{\",\r\n \" gl_Position = projection * worldView * vec4(position, 1.0);\",\r\n \"}\"\r\n ].join(\"\\n\");\r\n\r\n Effect.ShadersStore[\"GLTFDefaultMaterialPixelShader\"] = [\r\n \"precision highp float;\",\r\n \"\",\r\n \"uniform vec4 u_emission;\",\r\n \"\",\r\n \"void main(void)\",\r\n \"{\",\r\n \" gl_FragColor = u_emission;\",\r\n \"}\"\r\n ].join(\"\\n\");\r\n\r\n var shaderPath = {\r\n vertex: \"GLTFDefaultMaterial\",\r\n fragment: \"GLTFDefaultMaterial\"\r\n };\r\n\r\n var options = {\r\n attributes: [\"position\"],\r\n uniforms: [\"worldView\", \"projection\", \"u_emission\"],\r\n samplers: new Array(),\r\n needAlphaBlending: false\r\n };\r\n\r\n GLTFUtils._DefaultMaterial = new ShaderMaterial(\"GLTFDefaultMaterial\", scene, shaderPath, options);\r\n GLTFUtils._DefaultMaterial.setColor4(\"u_emission\", new Color4(0.5, 0.5, 0.5, 1.0));\r\n }\r\n\r\n return GLTFUtils._DefaultMaterial;\r\n }\r\n\r\n // The GLTF default material\r\n private static _DefaultMaterial: Nullable = null;\r\n}","import { GLTFLoaderExtension } from \"./glTFLoader\";\nimport { GLTFLoaderBase } from \"./glTFLoader\";\n\nimport { IGLTFRuntime, IGLTFMaterial } from \"./glTFLoaderInterfaces\";\n\nimport { Vector3 } from \"babylonjs/Maths/math.vector\";\nimport { Color3 } from 'babylonjs/Maths/math.color';\nimport { Tools } from \"babylonjs/Misc/tools\";\nimport { Material } from \"babylonjs/Materials/material\";\nimport { StandardMaterial } from \"babylonjs/Materials/standardMaterial\";\nimport { HemisphericLight } from \"babylonjs/Lights/hemisphericLight\";\nimport { DirectionalLight } from \"babylonjs/Lights/directionalLight\";\nimport { PointLight } from \"babylonjs/Lights/pointLight\";\nimport { SpotLight } from \"babylonjs/Lights/spotLight\";\n\nimport { GLTFLoader } from \"./glTFLoader\";\n\ninterface IGLTFMaterialsCommonExtensionValues {\n ambient?: number[] | string;\n diffuse?: number[] | string;\n emission?: number[] | string;\n specular?: number[] | string;\n shininess?: number;\n transparency?: number;\n}\n\ninterface IGLTFMaterialsCommonExtension {\n technique: string;\n transparent?: number;\n doubleSided?: boolean;\n values: IGLTFMaterialsCommonExtensionValues;\n}\n\ninterface IGLTFRuntimeCommonExtension {\n lights: { [key: string]: IGLTFLightCommonExtension };\n}\n\ninterface IGLTFLightCommonExtension {\n name: string;\n type: string;\n\n ambient?: IGLTFAmbientLightCommonExtension;\n point?: IGLTFPointLightCommonExtension;\n directional?: IGLTFDirectionalLightCommonExtension;\n spot?: IGLTFSpotLightCommonExtension;\n}\n\ninterface IGLTFPointLightCommonExtension {\n color: number[];\n constantAttenuation: number;\n linearAttenuation: number;\n quadraticAttenuation: number;\n}\n\ninterface IGLTFAmbientLightCommonExtension {\n color: number[];\n}\n\ninterface IGLTFDirectionalLightCommonExtension {\n color: number[];\n}\n\ninterface IGLTFSpotLightCommonExtension {\n color: number[];\n constantAttenuation: number;\n fallOffAngle: number;\n fallOffExponent: number;\n linearAttenuation: number;\n quadraticAttenuation: number;\n}\n\n/** @hidden */\nexport class GLTFMaterialsCommonExtension extends GLTFLoaderExtension {\n\n constructor() {\n super(\"KHR_materials_common\");\n }\n\n public loadRuntimeExtensionsAsync(gltfRuntime: IGLTFRuntime, onSuccess: () => void, onError: (message: string) => void): boolean {\n if (!gltfRuntime.extensions) { return false; }\n\n var extension: IGLTFRuntimeCommonExtension = gltfRuntime.extensions[this.name];\n if (!extension) { return false; }\n\n // Create lights\n var lights = extension.lights;\n if (lights) {\n for (var thing in lights) {\n var light: IGLTFLightCommonExtension = lights[thing];\n\n switch (light.type) {\n case \"ambient\":\n var ambientLight = new HemisphericLight(light.name, new Vector3(0, 1, 0), gltfRuntime.scene);\n var ambient = light.ambient;\n if (ambient) {\n ambientLight.diffuse = Color3.FromArray(ambient.color || [1, 1, 1]);\n }\n break;\n case \"point\":\n var pointLight = new PointLight(light.name, new Vector3(10, 10, 10), gltfRuntime.scene);\n var point = light.point;\n if (point) {\n pointLight.diffuse = Color3.FromArray(point.color || [1, 1, 1]);\n }\n break;\n case \"directional\":\n var dirLight = new DirectionalLight(light.name, new Vector3(0, -1, 0), gltfRuntime.scene);\n var directional = light.directional;\n if (directional) {\n dirLight.diffuse = Color3.FromArray(directional.color || [1, 1, 1]);\n }\n break;\n case \"spot\":\n var spot = light.spot;\n if (spot) {\n var spotLight = new SpotLight(light.name, new Vector3(0, 10, 0), new Vector3(0, -1, 0),\n spot.fallOffAngle || Math.PI,\n spot.fallOffExponent || 0.0,\n gltfRuntime.scene);\n spotLight.diffuse = Color3.FromArray(spot.color || [1, 1, 1]);\n }\n break;\n default: Tools.Warn(\"GLTF Material Common extension: light type \\\"\" + light.type + \"\\” not supported\"); break;\n }\n }\n }\n\n return false;\n }\n\n public loadMaterialAsync(gltfRuntime: IGLTFRuntime, id: string, onSuccess: (material: Material) => void, onError: (message: string) => void): boolean {\n var material: IGLTFMaterial = gltfRuntime.materials[id];\n if (!material || !material.extensions) { return false; }\n\n var extension: IGLTFMaterialsCommonExtension = material.extensions[this.name];\n if (!extension) { return false; }\n\n var standardMaterial = new StandardMaterial(id, gltfRuntime.scene);\n standardMaterial.sideOrientation = Material.CounterClockWiseSideOrientation;\n\n if (extension.technique === \"CONSTANT\") {\n standardMaterial.disableLighting = true;\n }\n\n standardMaterial.backFaceCulling = extension.doubleSided === undefined ? false : !extension.doubleSided;\n standardMaterial.alpha = extension.values.transparency === undefined ? 1.0 : extension.values.transparency;\n standardMaterial.specularPower = extension.values.shininess === undefined ? 0.0 : extension.values.shininess;\n\n // Ambient\n if (typeof extension.values.ambient === \"string\") {\n this._loadTexture(gltfRuntime, extension.values.ambient, standardMaterial, \"ambientTexture\", onError);\n }\n else {\n standardMaterial.ambientColor = Color3.FromArray(extension.values.ambient || [0, 0, 0]);\n }\n\n // Diffuse\n if (typeof extension.values.diffuse === \"string\") {\n this._loadTexture(gltfRuntime, extension.values.diffuse, standardMaterial, \"diffuseTexture\", onError);\n }\n else {\n standardMaterial.diffuseColor = Color3.FromArray(extension.values.diffuse || [0, 0, 0]);\n }\n\n // Emission\n if (typeof extension.values.emission === \"string\") {\n this._loadTexture(gltfRuntime, extension.values.emission, standardMaterial, \"emissiveTexture\", onError);\n }\n else {\n standardMaterial.emissiveColor = Color3.FromArray(extension.values.emission || [0, 0, 0]);\n }\n\n // Specular\n if (typeof extension.values.specular === \"string\") {\n this._loadTexture(gltfRuntime, extension.values.specular, standardMaterial, \"specularTexture\", onError);\n }\n else {\n standardMaterial.specularColor = Color3.FromArray(extension.values.specular || [0, 0, 0]);\n }\n\n return true;\n }\n\n private _loadTexture(gltfRuntime: IGLTFRuntime, id: string, material: StandardMaterial, propertyPath: string, onError: (message: string) => void): void {\n // Create buffer from texture url\n GLTFLoaderBase.LoadTextureBufferAsync(gltfRuntime, id, (buffer) => {\n // Create texture from buffer\n GLTFLoaderBase.CreateTextureAsync(gltfRuntime, id, buffer, (texture) => (material)[propertyPath] = texture, onError);\n }, onError);\n }\n}\n\nGLTFLoader.RegisterExtension(new GLTFMaterialsCommonExtension());\n","export * from \"./glTFBinaryExtension\";\r\nexport * from \"./glTFLoader\";\r\nexport * from \"./glTFLoaderInterfaces\";\r\nexport * from \"./glTFLoaderUtils\";\r\nexport * from \"./glTFMaterialsCommonExtension\";","import { Nullable } from \"babylonjs/types\";\r\nimport { Scalar } from \"babylonjs/Maths/math.scalar\";\r\nimport { SphericalHarmonics, SphericalPolynomial } from \"babylonjs/Maths/sphericalPolynomial\";\r\nimport { Quaternion, Matrix } from \"babylonjs/Maths/math.vector\";\r\nimport { BaseTexture } from \"babylonjs/Materials/Textures/baseTexture\";\r\nimport { RawCubeTexture } from \"babylonjs/Materials/Textures/rawCubeTexture\";\r\n\r\nimport { IEXTLightsImageBased_LightReferenceImageBased, IEXTLightsImageBased_LightImageBased, IEXTLightsImageBased } from \"babylonjs-gltf2interface\";\r\nimport { IScene } from \"../glTFLoaderInterfaces\";\r\nimport { IGLTFLoaderExtension } from \"../glTFLoaderExtension\";\r\nimport { GLTFLoader, ArrayItem } from \"../glTFLoader\";\r\n\r\nconst NAME = \"EXT_lights_image_based\";\r\n\r\ndeclare module \"babylonjs-gltf2interface\" {\r\n /** @hidden */\r\n interface IEXTLightsImageBased_LightImageBased {\r\n _babylonTexture?: BaseTexture;\r\n _loaded?: Promise;\r\n }\r\n}\r\n\r\n/**\r\n * [Specification](https://github.com/KhronosGroup/glTF/blob/master/extensions/2.0/Vendor/EXT_lights_image_based/README.md)\r\n */\r\nexport class EXT_lights_image_based implements IGLTFLoaderExtension {\r\n /**\r\n * The name of this extension.\r\n */\r\n public readonly name = NAME;\r\n\r\n /**\r\n * Defines whether this extension is enabled.\r\n */\r\n public enabled: boolean;\r\n\r\n private _loader: GLTFLoader;\r\n private _lights?: IEXTLightsImageBased_LightImageBased[];\r\n\r\n /** @hidden */\r\n constructor(loader: GLTFLoader) {\r\n this._loader = loader;\r\n this.enabled = this._loader.isExtensionUsed(NAME);\r\n }\r\n\r\n /** @hidden */\r\n public dispose() {\r\n (this._loader as any) = null;\r\n delete this._lights;\r\n }\r\n\r\n /** @hidden */\r\n public onLoading(): void {\r\n const extensions = this._loader.gltf.extensions;\r\n if (extensions && extensions[this.name]) {\r\n const extension = extensions[this.name] as IEXTLightsImageBased;\r\n this._lights = extension.lights;\r\n }\r\n }\r\n\r\n /** @hidden */\r\n public loadSceneAsync(context: string, scene: IScene): Nullable> {\r\n return GLTFLoader.LoadExtensionAsync(context, scene, this.name, (extensionContext, extension) => {\r\n const promises = new Array>();\r\n\r\n promises.push(this._loader.loadSceneAsync(context, scene));\r\n\r\n this._loader.logOpen(`${extensionContext}`);\r\n\r\n const light = ArrayItem.Get(`${extensionContext}/light`, this._lights, extension.light);\r\n promises.push(this._loadLightAsync(`/extensions/${this.name}/lights/${extension.light}`, light).then((texture) => {\r\n this._loader.babylonScene.environmentTexture = texture;\r\n }));\r\n\r\n this._loader.logClose();\r\n\r\n return Promise.all(promises).then(() => { });\r\n });\r\n }\r\n\r\n private _loadLightAsync(context: string, light: IEXTLightsImageBased_LightImageBased): Promise {\r\n if (!light._loaded) {\r\n const promises = new Array>();\r\n\r\n this._loader.logOpen(`${context}`);\r\n\r\n const imageData = new Array>(light.specularImages.length);\r\n for (let mipmap = 0; mipmap < light.specularImages.length; mipmap++) {\r\n const faces = light.specularImages[mipmap];\r\n imageData[mipmap] = new Array(faces.length);\r\n for (let face = 0; face < faces.length; face++) {\r\n const specularImageContext = `${context}/specularImages/${mipmap}/${face}`;\r\n this._loader.logOpen(`${specularImageContext}`);\r\n\r\n const index = faces[face];\r\n const image = ArrayItem.Get(specularImageContext, this._loader.gltf.images, index);\r\n promises.push(this._loader.loadImageAsync(`/images/${index}`, image).then((data) => {\r\n imageData[mipmap][face] = data;\r\n }));\r\n\r\n this._loader.logClose();\r\n }\r\n }\r\n\r\n this._loader.logClose();\r\n\r\n light._loaded = Promise.all(promises).then(() => {\r\n const babylonTexture = new RawCubeTexture(this._loader.babylonScene, null, light.specularImageSize);\r\n babylonTexture.name = light.name || \"environment\";\r\n light._babylonTexture = babylonTexture;\r\n\r\n if (light.intensity != undefined) {\r\n babylonTexture.level = light.intensity;\r\n }\r\n\r\n if (light.rotation) {\r\n let rotation = Quaternion.FromArray(light.rotation);\r\n\r\n // Invert the rotation so that positive rotation is counter-clockwise.\r\n if (!this._loader.babylonScene.useRightHandedSystem) {\r\n rotation = Quaternion.Inverse(rotation);\r\n }\r\n\r\n Matrix.FromQuaternionToRef(rotation, babylonTexture.getReflectionTextureMatrix());\r\n }\r\n\r\n const sphericalHarmonics = SphericalHarmonics.FromArray(light.irradianceCoefficients);\r\n sphericalHarmonics.scaleInPlace(light.intensity);\r\n\r\n sphericalHarmonics.convertIrradianceToLambertianRadiance();\r\n const sphericalPolynomial = SphericalPolynomial.FromHarmonics(sphericalHarmonics);\r\n\r\n // Compute the lod generation scale to fit exactly to the number of levels available.\r\n const lodGenerationScale = (imageData.length - 1) / Scalar.Log2(light.specularImageSize);\r\n return babylonTexture.updateRGBDAsync(imageData, sphericalPolynomial, lodGenerationScale);\r\n });\r\n }\r\n\r\n return light._loaded.then(() => {\r\n return light._babylonTexture!;\r\n });\r\n }\r\n}\r\n\r\nGLTFLoader.RegisterExtension(NAME, (loader) => new EXT_lights_image_based(loader));","import { Vector3, Quaternion, Matrix } from 'babylonjs/Maths/math.vector';\nimport { Mesh } from 'babylonjs/Meshes/mesh';\nimport { TransformNode } from \"babylonjs/Meshes/transformNode\";\nimport { Nullable } from \"babylonjs/types\";\nimport { GLTFLoader, ArrayItem } from \"../glTFLoader\";\nimport { IGLTFLoaderExtension } from \"../glTFLoaderExtension\";\nimport { INode } from \"../glTFLoaderInterfaces\";\nimport { TmpVectors } from 'babylonjs/Maths/math.vector';\nimport { IEXTMeshGpuInstancing } from \"babylonjs-gltf2interface\";\n\nconst NAME = \"EXT_mesh_gpu_instancing\";\n\n/**\n * [Proposed Specification](https://github.com/KhronosGroup/glTF/pull/1691)\n * [Playground Sample](https://playground.babylonjs.com/#QFIGLW#9)\n * !!! Experimental Extension Subject to Changes !!!\n */\nexport class EXT_mesh_gpu_instancing implements IGLTFLoaderExtension {\n /**\n * The name of this extension.\n */\n public readonly name = NAME;\n\n /**\n * Defines whether this extension is enabled.\n */\n public enabled: boolean;\n\n private _loader: GLTFLoader;\n\n /** @hidden */\n constructor(loader: GLTFLoader) {\n this._loader = loader;\n this.enabled = this._loader.isExtensionUsed(NAME);\n }\n\n /** @hidden */\n public dispose() {\n (this._loader as any) = null;\n }\n\n /** @hidden */\n public loadNodeAsync(context: string, node: INode, assign: (babylonTransformNode: TransformNode) => void): Nullable> {\n return GLTFLoader.LoadExtensionAsync(context, node, this.name, (extensionContext, extension) => {\n this._loader._disableInstancedMesh++;\n\n const promise = this._loader.loadNodeAsync(`/nodes/${node.index}`, node, assign);\n\n this._loader._disableInstancedMesh--;\n\n if (!node._primitiveBabylonMeshes) {\n return promise;\n }\n\n const promises = new Array>>();\n let instanceCount = 0;\n\n const loadAttribute = (attribute: string) => {\n if (extension.attributes[attribute] == undefined) {\n promises.push(Promise.resolve(null));\n return;\n }\n\n const accessor = ArrayItem.Get(`${extensionContext}/attributes/${attribute}`, this._loader.gltf.accessors, extension.attributes[attribute]);\n promises.push(this._loader._loadFloatAccessorAsync(`/accessors/${accessor.bufferView}`, accessor));\n\n if (instanceCount === 0) {\n instanceCount = accessor.count;\n } else if (instanceCount !== accessor.count) {\n throw new Error(`${extensionContext}/attributes: Instance buffer accessors do not have the same count.`);\n }\n };\n\n loadAttribute(\"TRANSLATION\");\n loadAttribute(\"ROTATION\");\n loadAttribute(\"SCALE\");\n\n return promise.then((babylonTransformNode) => {\n return Promise.all(promises).then(([translationBuffer, rotationBuffer, scaleBuffer]) => {\n const matrices = new Float32Array(instanceCount * 16);\n\n TmpVectors.Vector3[0].copyFromFloats(0, 0, 0); // translation\n TmpVectors.Quaternion[0].copyFromFloats(0, 0, 0, 1); // rotation\n TmpVectors.Vector3[1].copyFromFloats(1, 1, 1); // scale\n\n for (let i = 0; i < instanceCount; ++i) {\n translationBuffer && Vector3.FromArrayToRef(translationBuffer, i * 3, TmpVectors.Vector3[0]);\n rotationBuffer && Quaternion.FromArrayToRef(rotationBuffer, i * 4, TmpVectors.Quaternion[0]);\n scaleBuffer && Vector3.FromArrayToRef(scaleBuffer, i * 3, TmpVectors.Vector3[1]);\n\n Matrix.ComposeToRef(TmpVectors.Vector3[1], TmpVectors.Quaternion[0], TmpVectors.Vector3[0], TmpVectors.Matrix[0]);\n\n TmpVectors.Matrix[0].copyToArray(matrices, i * 16);\n }\n\n for (const babylonMesh of node._primitiveBabylonMeshes!) {\n (babylonMesh as Mesh).thinInstanceSetBuffer(\"matrix\", matrices, 16, true);\n }\n\n return babylonTransformNode;\n });\n });\n });\n }\n}\n\nGLTFLoader.RegisterExtension(NAME, (loader) => new EXT_mesh_gpu_instancing(loader));\n","import { IGLTFLoaderExtension } from \"../glTFLoaderExtension\";\r\nimport { GLTFLoader, ArrayItem } from \"../glTFLoader\";\r\nimport { ITexture } from \"../glTFLoaderInterfaces\";\r\nimport { BaseTexture } from \"babylonjs/Materials/Textures/baseTexture\";\r\nimport { Nullable } from \"babylonjs/types\";\r\nimport { IEXTTextureWebP } from 'babylonjs-gltf2interface';\r\n\r\nconst NAME = \"EXT_texture_webp\";\r\n\r\n/**\r\n * [Specification](https://github.com/KhronosGroup/glTF/blob/master/extensions/2.0/Vendor/EXT_texture_webp/)\r\n */\r\nexport class EXT_texture_webp implements IGLTFLoaderExtension {\r\n /** The name of this extension. */\r\n public readonly name = NAME;\r\n\r\n /** Defines whether this extension is enabled. */\r\n public enabled: boolean;\r\n\r\n private _loader: GLTFLoader;\r\n\r\n /** @hidden */\r\n constructor(loader: GLTFLoader) {\r\n this._loader = loader;\r\n this.enabled = loader.isExtensionUsed(NAME);\r\n }\r\n\r\n /** @hidden */\r\n public dispose() {\r\n (this._loader as any) = null;\r\n }\r\n\r\n /** @hidden */\r\n public _loadTextureAsync(context: string, texture: ITexture, assign: (babylonTexture: BaseTexture) => void): Nullable> {\r\n return GLTFLoader.LoadExtensionAsync(context, texture, this.name, (extensionContext, extension) => {\r\n const sampler = (texture.sampler == undefined ? GLTFLoader.DefaultSampler : ArrayItem.Get(`${context}/sampler`, this._loader.gltf.samplers, texture.sampler));\r\n const image = ArrayItem.Get(`${extensionContext}/source`, this._loader.gltf.images, extension.source);\r\n return this._loader._createTextureAsync(context, sampler, image, (babylonTexture) => {\r\n assign(babylonTexture);\r\n });\r\n });\r\n }\r\n}\r\n\r\nGLTFLoader.RegisterExtension(NAME, (loader) => new EXT_texture_webp(loader));\r\n","import { Nullable } from \"babylonjs/types\";\r\nimport { TransformNode } from \"babylonjs/Meshes/transformNode\";\r\nimport { Camera } from \"babylonjs/Cameras/camera\";\r\n\r\nimport { IProperty } from \"babylonjs-gltf2interface\";\r\nimport { INode, ICamera, IMaterial } from \"../glTFLoaderInterfaces\";\r\nimport { IGLTFLoaderExtension } from \"../glTFLoaderExtension\";\r\nimport { GLTFLoader } from \"../glTFLoader\";\r\nimport { Material } from \"babylonjs/Materials/material\";\r\n\r\nconst NAME = \"ExtrasAsMetadata\";\r\n\r\ninterface ObjectWithMetadata {\r\n metadata: any;\r\n}\r\n\r\n/**\r\n * Store glTF extras (if present) in BJS objects' metadata\r\n */\r\nexport class ExtrasAsMetadata implements IGLTFLoaderExtension {\r\n /**\r\n * The name of this extension.\r\n */\r\n public readonly name = NAME;\r\n\r\n /**\r\n * Defines whether this extension is enabled.\r\n */\r\n public enabled = true;\r\n\r\n private _loader: GLTFLoader;\r\n\r\n private _assignExtras(\r\n babylonObject: ObjectWithMetadata,\r\n gltfProp: IProperty\r\n ): void {\r\n if (gltfProp.extras && Object.keys(gltfProp.extras).length > 0) {\r\n const metadata = (babylonObject.metadata = babylonObject.metadata || {});\r\n const gltf = (metadata.gltf = metadata.gltf || {});\r\n gltf.extras = gltfProp.extras;\r\n }\r\n }\r\n\r\n /** @hidden */\r\n public constructor(loader: GLTFLoader) {\r\n this._loader = loader;\r\n }\r\n\r\n /** @hidden */\r\n public dispose(): void {\r\n (this._loader as any) = null;\r\n }\r\n\r\n /** @hidden */\r\n public loadNodeAsync(\r\n context: string,\r\n node: INode,\r\n assign: (babylonTransformNode: TransformNode) => void\r\n ): Nullable> {\r\n return this._loader.loadNodeAsync(\r\n context,\r\n node,\r\n (babylonTransformNode): void => {\r\n this._assignExtras(babylonTransformNode, node);\r\n assign(babylonTransformNode);\r\n }\r\n );\r\n }\r\n\r\n /** @hidden */\r\n public loadCameraAsync(\r\n context: string,\r\n camera: ICamera,\r\n assign: (babylonCamera: Camera) => void\r\n ): Nullable> {\r\n return this._loader.loadCameraAsync(\r\n context,\r\n camera,\r\n (babylonCamera): void => {\r\n this._assignExtras(babylonCamera, camera);\r\n assign(babylonCamera);\r\n }\r\n );\r\n }\r\n\r\n /** @hidden */\r\n public createMaterial(\r\n context: string,\r\n material: IMaterial,\r\n babylonDrawMode: number\r\n ): Nullable {\r\n const babylonMaterial = this._loader.createMaterial(\r\n context,\r\n material,\r\n babylonDrawMode\r\n );\r\n this._assignExtras(babylonMaterial, material);\r\n return babylonMaterial;\r\n }\r\n}\r\n\r\nGLTFLoader.RegisterExtension(\r\n NAME,\r\n (loader): IGLTFLoaderExtension => new ExtrasAsMetadata(loader)\r\n);\r\n","import { DracoCompression } from \"babylonjs/Meshes/Compression/dracoCompression\";\r\nimport { Nullable } from \"babylonjs/types\";\r\nimport { VertexBuffer } from \"babylonjs/Meshes/buffer\";\r\nimport { Geometry } from \"babylonjs/Meshes/geometry\";\r\nimport { Mesh } from \"babylonjs/Meshes/mesh\";\r\n\r\nimport { MeshPrimitiveMode, IKHRDracoMeshCompression } from \"babylonjs-gltf2interface\";\r\nimport { IMeshPrimitive, IBufferView } from \"../glTFLoaderInterfaces\";\r\nimport { IGLTFLoaderExtension } from \"../glTFLoaderExtension\";\r\nimport { GLTFLoader, ArrayItem } from \"../glTFLoader\";\r\n\r\nconst NAME = \"KHR_draco_mesh_compression\";\r\n\r\ninterface IBufferViewDraco extends IBufferView {\r\n _dracoBabylonGeometry?: Promise;\r\n}\r\n\r\n/**\r\n * [Specification](https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_draco_mesh_compression)\r\n */\r\nexport class KHR_draco_mesh_compression implements IGLTFLoaderExtension {\r\n /**\r\n * The name of this extension.\r\n */\r\n public readonly name = NAME;\r\n\r\n /**\r\n * The draco compression used to decode vertex data or DracoCompression.Default if not defined\r\n */\r\n public dracoCompression?: DracoCompression;\r\n\r\n /**\r\n * Defines whether this extension is enabled.\r\n */\r\n public enabled: boolean;\r\n\r\n private _loader: GLTFLoader;\r\n\r\n /** @hidden */\r\n constructor(loader: GLTFLoader) {\r\n this._loader = loader;\r\n this.enabled = DracoCompression.DecoderAvailable && this._loader.isExtensionUsed(NAME);\r\n }\r\n\r\n /** @hidden */\r\n public dispose(): void {\r\n delete this.dracoCompression;\r\n (this._loader as any) = null;\r\n }\r\n\r\n /** @hidden */\r\n public _loadVertexDataAsync(context: string, primitive: IMeshPrimitive, babylonMesh: Mesh): Nullable> {\r\n return GLTFLoader.LoadExtensionAsync(context, primitive, this.name, (extensionContext, extension) => {\r\n if (primitive.mode != undefined) {\r\n if (primitive.mode !== MeshPrimitiveMode.TRIANGLE_STRIP &&\r\n primitive.mode !== MeshPrimitiveMode.TRIANGLES) {\r\n throw new Error(`${context}: Unsupported mode ${primitive.mode}`);\r\n }\r\n\r\n // TODO: handle triangle strips\r\n if (primitive.mode === MeshPrimitiveMode.TRIANGLE_STRIP) {\r\n throw new Error(`${context}: Mode ${primitive.mode} is not currently supported`);\r\n }\r\n }\r\n\r\n const attributes: { [kind: string]: number } = {};\r\n const loadAttribute = (name: string, kind: string) => {\r\n const uniqueId = extension.attributes[name];\r\n if (uniqueId == undefined) {\r\n return;\r\n }\r\n\r\n babylonMesh._delayInfo = babylonMesh._delayInfo || [];\r\n if (babylonMesh._delayInfo.indexOf(kind) === -1) {\r\n babylonMesh._delayInfo.push(kind);\r\n }\r\n\r\n attributes[kind] = uniqueId;\r\n };\r\n\r\n loadAttribute(\"POSITION\", VertexBuffer.PositionKind);\r\n loadAttribute(\"NORMAL\", VertexBuffer.NormalKind);\r\n loadAttribute(\"TANGENT\", VertexBuffer.TangentKind);\r\n loadAttribute(\"TEXCOORD_0\", VertexBuffer.UVKind);\r\n loadAttribute(\"TEXCOORD_1\", VertexBuffer.UV2Kind);\r\n loadAttribute(\"JOINTS_0\", VertexBuffer.MatricesIndicesKind);\r\n loadAttribute(\"WEIGHTS_0\", VertexBuffer.MatricesWeightsKind);\r\n loadAttribute(\"COLOR_0\", VertexBuffer.ColorKind);\r\n\r\n var bufferView = ArrayItem.Get(extensionContext, this._loader.gltf.bufferViews, extension.bufferView) as IBufferViewDraco;\r\n if (!bufferView._dracoBabylonGeometry) {\r\n bufferView._dracoBabylonGeometry = this._loader.loadBufferViewAsync(`/bufferViews/${bufferView.index}`, bufferView).then((data) => {\r\n const dracoCompression = this.dracoCompression || DracoCompression.Default;\r\n return dracoCompression.decodeMeshAsync(data, attributes).then((babylonVertexData) => {\r\n const babylonGeometry = new Geometry(babylonMesh.name, this._loader.babylonScene);\r\n babylonVertexData.applyToGeometry(babylonGeometry);\r\n return babylonGeometry;\r\n }).catch((error) => {\r\n throw new Error(`${context}: ${error.message}`);\r\n });\r\n });\r\n }\r\n\r\n return bufferView._dracoBabylonGeometry;\r\n });\r\n }\r\n}\r\n\r\nGLTFLoader.RegisterExtension(NAME, (loader) => new KHR_draco_mesh_compression(loader));","import { Nullable } from \"babylonjs/types\";\nimport { Vector3 } from \"babylonjs/Maths/math.vector\";\nimport { Color3 } from 'babylonjs/Maths/math.color';\nimport { DirectionalLight } from \"babylonjs/Lights/directionalLight\";\nimport { PointLight } from \"babylonjs/Lights/pointLight\";\nimport { SpotLight } from \"babylonjs/Lights/spotLight\";\nimport { Light } from \"babylonjs/Lights/light\";\nimport { TransformNode } from \"babylonjs/Meshes/transformNode\";\n\nimport { IKHRLightsPunctual_LightType, IKHRLightsPunctual_LightReference, IKHRLightsPunctual_Light, IKHRLightsPunctual } from \"babylonjs-gltf2interface\";\nimport { INode } from \"../glTFLoaderInterfaces\";\nimport { IGLTFLoaderExtension } from \"../glTFLoaderExtension\";\nimport { GLTFLoader, ArrayItem } from \"../glTFLoader\";\n\nconst NAME = \"KHR_lights_punctual\";\n\n/**\n * [Specification](https://github.com/KhronosGroup/glTF/blob/master/extensions/2.0/Khronos/KHR_lights_punctual)\n */\nexport class KHR_lights implements IGLTFLoaderExtension {\n /**\n * The name of this extension.\n */\n public readonly name = NAME;\n\n /**\n * Defines whether this extension is enabled.\n */\n public enabled: boolean;\n\n private _loader: GLTFLoader;\n private _lights?: IKHRLightsPunctual_Light[];\n\n /** @hidden */\n constructor(loader: GLTFLoader) {\n this._loader = loader;\n this.enabled = this._loader.isExtensionUsed(NAME);\n }\n\n /** @hidden */\n public dispose() {\n (this._loader as any) = null;\n delete this._lights;\n }\n\n /** @hidden */\n public onLoading(): void {\n const extensions = this._loader.gltf.extensions;\n if (extensions && extensions[this.name]) {\n const extension = extensions[this.name] as IKHRLightsPunctual;\n this._lights = extension.lights;\n }\n }\n\n /** @hidden */\n public loadNodeAsync(context: string, node: INode, assign: (babylonTransformNode: TransformNode) => void): Nullable> {\n return GLTFLoader.LoadExtensionAsync(context, node, this.name, (extensionContext, extension) => {\n return this._loader.loadNodeAsync(context, node, (babylonMesh) => {\n let babylonLight: Light;\n\n const light = ArrayItem.Get(extensionContext, this._lights, extension.light);\n const name = light.name || babylonMesh.name;\n\n this._loader.babylonScene._blockEntityCollection = this._loader._forAssetContainer;\n\n switch (light.type) {\n case IKHRLightsPunctual_LightType.DIRECTIONAL: {\n babylonLight = new DirectionalLight(name, Vector3.Backward(), this._loader.babylonScene);\n break;\n }\n case IKHRLightsPunctual_LightType.POINT: {\n babylonLight = new PointLight(name, Vector3.Zero(), this._loader.babylonScene);\n break;\n }\n case IKHRLightsPunctual_LightType.SPOT: {\n const babylonSpotLight = new SpotLight(name, Vector3.Zero(), Vector3.Backward(), 0, 1, this._loader.babylonScene);\n babylonSpotLight.angle = ((light.spot && light.spot.outerConeAngle) || Math.PI / 4) * 2;\n babylonSpotLight.innerAngle = ((light.spot && light.spot.innerConeAngle) || 0) * 2;\n babylonLight = babylonSpotLight;\n break;\n }\n default: {\n this._loader.babylonScene._blockEntityCollection = false;\n throw new Error(`${extensionContext}: Invalid light type (${light.type})`);\n }\n }\n\n this._loader.babylonScene._blockEntityCollection = false;\n babylonLight.falloffType = Light.FALLOFF_GLTF;\n babylonLight.diffuse = light.color ? Color3.FromArray(light.color) : Color3.White();\n babylonLight.intensity = light.intensity == undefined ? 1 : light.intensity;\n babylonLight.range = light.range == undefined ? Number.MAX_VALUE : light.range;\n babylonLight.parent = babylonMesh;\n\n this._loader._babylonLights.push(babylonLight);\n\n GLTFLoader.AddPointerMetadata(babylonLight, extensionContext);\n\n assign(babylonMesh);\n });\n });\n }\n}\n\nGLTFLoader.RegisterExtension(NAME, (loader) => new KHR_lights(loader));","import { Nullable } from \"babylonjs/types\";\nimport { PBRMaterial } from \"babylonjs/Materials/PBR/pbrMaterial\";\nimport { Material } from \"babylonjs/Materials/material\";\n\nimport { IMaterial } from \"../glTFLoaderInterfaces\";\nimport { IGLTFLoaderExtension } from \"../glTFLoaderExtension\";\nimport { GLTFLoader } from \"../glTFLoader\";\nimport { IKHRMaterialsClearcoat } from 'babylonjs-gltf2interface';\n\nconst NAME = \"KHR_materials_clearcoat\";\n\n/**\n * [Proposed Specification](https://github.com/KhronosGroup/glTF/pull/1677)\n * [Playground Sample](https://www.babylonjs-playground.com/frame.html#7F7PN6#8)\n * !!! Experimental Extension Subject to Changes !!!\n */\nexport class KHR_materials_clearcoat implements IGLTFLoaderExtension {\n /**\n * The name of this extension.\n */\n public readonly name = NAME;\n\n /**\n * Defines whether this extension is enabled.\n */\n public enabled: boolean;\n\n /**\n * Defines a number that determines the order the extensions are applied.\n */\n public order = 190;\n\n private _loader: GLTFLoader;\n\n /** @hidden */\n constructor(loader: GLTFLoader) {\n this._loader = loader;\n this.enabled = this._loader.isExtensionUsed(NAME);\n }\n\n /** @hidden */\n public dispose() {\n (this._loader as any) = null;\n }\n\n /** @hidden */\n public loadMaterialPropertiesAsync(context: string, material: IMaterial, babylonMaterial: Material): Nullable> {\n return GLTFLoader.LoadExtensionAsync(context, material, this.name, (extensionContext, extension) => {\n const promises = new Array>();\n promises.push(this._loader.loadMaterialPropertiesAsync(context, material, babylonMaterial));\n promises.push(this._loadClearCoatPropertiesAsync(extensionContext, extension, babylonMaterial));\n return Promise.all(promises).then(() => { });\n });\n }\n\n private _loadClearCoatPropertiesAsync(context: string, properties: IKHRMaterialsClearcoat, babylonMaterial: Material): Promise {\n if (!(babylonMaterial instanceof PBRMaterial)) {\n throw new Error(`${context}: Material type not supported`);\n }\n\n const promises = new Array>();\n\n babylonMaterial.clearCoat.isEnabled = true;\n\n if (properties.clearcoatFactor != undefined) {\n babylonMaterial.clearCoat.intensity = properties.clearcoatFactor;\n }\n else {\n babylonMaterial.clearCoat.intensity = 0;\n }\n\n if (properties.clearcoatTexture) {\n promises.push(this._loader.loadTextureInfoAsync(`${context}/clearcoatTexture`, properties.clearcoatTexture, (texture) => {\n texture.name = `${babylonMaterial.name} (ClearCoat Intensity)`;\n babylonMaterial.clearCoat.texture = texture;\n }));\n }\n\n if (properties.clearcoatRoughnessFactor != undefined) {\n babylonMaterial.clearCoat.roughness = properties.clearcoatRoughnessFactor;\n }\n else {\n babylonMaterial.clearCoat.roughness = 0;\n }\n\n if (properties.clearcoatRoughnessTexture) {\n promises.push(this._loader.loadTextureInfoAsync(`${context}/clearcoatRoughnessTexture`, properties.clearcoatRoughnessTexture, (texture) => {\n texture.name = `${babylonMaterial.name} (ClearCoat Roughness)`;\n babylonMaterial.clearCoat.texture = texture;\n }));\n }\n\n if (properties.clearcoatNormalTexture) {\n promises.push(this._loader.loadTextureInfoAsync(`${context}/clearcoatNormalTexture`, properties.clearcoatNormalTexture, (texture) => {\n texture.name = `${babylonMaterial.name} (ClearCoat Normal)`;\n babylonMaterial.clearCoat.bumpTexture = texture;\n }));\n\n babylonMaterial.invertNormalMapX = !babylonMaterial.getScene().useRightHandedSystem;\n babylonMaterial.invertNormalMapY = babylonMaterial.getScene().useRightHandedSystem;\n if (properties.clearcoatNormalTexture.scale != undefined) {\n babylonMaterial.clearCoat.bumpTexture!.level = properties.clearcoatNormalTexture.scale;\n }\n }\n\n return Promise.all(promises).then(() => { });\n }\n}\n\nGLTFLoader.RegisterExtension(NAME, (loader) => new KHR_materials_clearcoat(loader));","import { Nullable } from \"babylonjs/types\";\nimport { PBRMaterial } from \"babylonjs/Materials/PBR/pbrMaterial\";\nimport { Material } from \"babylonjs/Materials/material\";\n\nimport { IMaterial } from \"../glTFLoaderInterfaces\";\nimport { IGLTFLoaderExtension } from \"../glTFLoaderExtension\";\nimport { GLTFLoader } from \"../glTFLoader\";\nimport { IKHRMaterialsIor } from 'babylonjs-gltf2interface';\n\nconst NAME = \"KHR_materials_ior\";\n\n/**\n * [Proposed Specification](https://github.com/KhronosGroup/glTF/pull/1718)\n * !!! Experimental Extension Subject to Changes !!!\n */\nexport class KHR_materials_ior implements IGLTFLoaderExtension {\n /**\n * Default ior Value from the spec.\n */\n private static readonly _DEFAULT_IOR = 1.5;\n\n /**\n * The name of this extension.\n */\n public readonly name = NAME;\n\n /**\n * Defines whether this extension is enabled.\n */\n public enabled: boolean;\n\n /**\n * Defines a number that determines the order the extensions are applied.\n */\n public order = 180;\n\n private _loader: GLTFLoader;\n\n /** @hidden */\n constructor(loader: GLTFLoader) {\n this._loader = loader;\n this.enabled = this._loader.isExtensionUsed(NAME);\n }\n\n /** @hidden */\n public dispose() {\n (this._loader as any) = null;\n }\n\n /** @hidden */\n public loadMaterialPropertiesAsync(context: string, material: IMaterial, babylonMaterial: Material): Nullable> {\n return GLTFLoader.LoadExtensionAsync(context, material, this.name, (extensionContext, extension) => {\n const promises = new Array>();\n promises.push(this._loader.loadMaterialPropertiesAsync(context, material, babylonMaterial));\n promises.push(this._loadIorPropertiesAsync(extensionContext, extension, babylonMaterial));\n return Promise.all(promises).then(() => { });\n });\n }\n\n private _loadIorPropertiesAsync(context: string, properties: IKHRMaterialsIor, babylonMaterial: Material): Promise {\n if (!(babylonMaterial instanceof PBRMaterial)) {\n throw new Error(`${context}: Material type not supported`);\n }\n\n if (properties.ior !== undefined) {\n babylonMaterial.indexOfRefraction = properties.ior;\n }\n else {\n babylonMaterial.indexOfRefraction = KHR_materials_ior._DEFAULT_IOR;\n }\n\n return Promise.resolve();\n }\n}\n\nGLTFLoader.RegisterExtension(NAME, (loader) => new KHR_materials_ior(loader));","import { Nullable } from \"babylonjs/types\";\nimport { Color3 } from \"babylonjs/Maths/math.color\";\nimport { PBRMaterial } from \"babylonjs/Materials/PBR/pbrMaterial\";\nimport { Material } from \"babylonjs/Materials/material\";\n\nimport { IMaterial } from \"../glTFLoaderInterfaces\";\nimport { IGLTFLoaderExtension } from \"../glTFLoaderExtension\";\nimport { GLTFLoader } from \"../glTFLoader\";\nimport { IKHRMaterialsPbrSpecularGlossiness } from 'babylonjs-gltf2interface';\n\nconst NAME = \"KHR_materials_pbrSpecularGlossiness\";\n\n/**\n * [Specification](https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_pbrSpecularGlossiness)\n */\nexport class KHR_materials_pbrSpecularGlossiness implements IGLTFLoaderExtension {\n /**\n * The name of this extension.\n */\n public readonly name = NAME;\n\n /**\n * Defines whether this extension is enabled.\n */\n public enabled: boolean;\n\n /**\n * Defines a number that determines the order the extensions are applied.\n */\n public order = 200;\n\n private _loader: GLTFLoader;\n\n /** @hidden */\n constructor(loader: GLTFLoader) {\n this._loader = loader;\n this.enabled = this._loader.isExtensionUsed(NAME);\n }\n\n /** @hidden */\n public dispose() {\n (this._loader as any) = null;\n }\n\n /** @hidden */\n public loadMaterialPropertiesAsync(context: string, material: IMaterial, babylonMaterial: Material): Nullable> {\n return GLTFLoader.LoadExtensionAsync(context, material, this.name, (extensionContext, extension) => {\n const promises = new Array>();\n promises.push(this._loader.loadMaterialBasePropertiesAsync(context, material, babylonMaterial));\n promises.push(this._loadSpecularGlossinessPropertiesAsync(extensionContext, material, extension, babylonMaterial));\n this._loader.loadMaterialAlphaProperties(context, material, babylonMaterial);\n return Promise.all(promises).then(() => { });\n });\n }\n\n private _loadSpecularGlossinessPropertiesAsync(context: string, material: IMaterial, properties: IKHRMaterialsPbrSpecularGlossiness, babylonMaterial: Material): Promise {\n if (!(babylonMaterial instanceof PBRMaterial)) {\n throw new Error(`${context}: Material type not supported`);\n }\n\n const promises = new Array>();\n\n babylonMaterial.metallic = null;\n babylonMaterial.roughness = null;\n\n if (properties.diffuseFactor) {\n babylonMaterial.albedoColor = Color3.FromArray(properties.diffuseFactor);\n babylonMaterial.alpha = properties.diffuseFactor[3];\n }\n else {\n babylonMaterial.albedoColor = Color3.White();\n }\n\n babylonMaterial.reflectivityColor = properties.specularFactor ? Color3.FromArray(properties.specularFactor) : Color3.White();\n babylonMaterial.microSurface = properties.glossinessFactor == undefined ? 1 : properties.glossinessFactor;\n\n if (properties.diffuseTexture) {\n promises.push(this._loader.loadTextureInfoAsync(`${context}/diffuseTexture`, properties.diffuseTexture, (texture) => {\n texture.name = `${babylonMaterial.name} (Diffuse)`;\n babylonMaterial.albedoTexture = texture;\n }));\n }\n\n if (properties.specularGlossinessTexture) {\n promises.push(this._loader.loadTextureInfoAsync(`${context}/specularGlossinessTexture`, properties.specularGlossinessTexture, (texture) => {\n texture.name = `${babylonMaterial.name} (Specular Glossiness)`;\n babylonMaterial.reflectivityTexture = texture;\n }));\n\n babylonMaterial.reflectivityTexture.hasAlpha = true;\n babylonMaterial.useMicroSurfaceFromReflectivityMapAlpha = true;\n }\n\n return Promise.all(promises).then(() => { });\n }\n}\n\nGLTFLoader.RegisterExtension(NAME, (loader) => new KHR_materials_pbrSpecularGlossiness(loader));","import { Nullable } from \"babylonjs/types\";\nimport { PBRMaterial } from \"babylonjs/Materials/PBR/pbrMaterial\";\nimport { Material } from \"babylonjs/Materials/material\";\n\nimport { IMaterial } from \"../glTFLoaderInterfaces\";\nimport { IGLTFLoaderExtension } from \"../glTFLoaderExtension\";\nimport { GLTFLoader } from \"../glTFLoader\";\nimport { Color3 } from 'babylonjs/Maths/math.color';\nimport { IKHRMaterialsSheen } from 'babylonjs-gltf2interface';\n\nconst NAME = \"KHR_materials_sheen\";\n\n/**\n * [Proposed Specification](https://github.com/KhronosGroup/glTF/pull/1688)\n * [Playground Sample](https://www.babylonjs-playground.com/frame.html#BNIZX6#4)\n * !!! Experimental Extension Subject to Changes !!!\n */\nexport class KHR_materials_sheen implements IGLTFLoaderExtension {\n /**\n * The name of this extension.\n */\n public readonly name = NAME;\n\n /**\n * Defines whether this extension is enabled.\n */\n public enabled: boolean;\n\n /**\n * Defines a number that determines the order the extensions are applied.\n */\n public order = 190;\n\n private _loader: GLTFLoader;\n\n /** @hidden */\n constructor(loader: GLTFLoader) {\n this._loader = loader;\n this.enabled = this._loader.isExtensionUsed(NAME);\n }\n\n /** @hidden */\n public dispose() {\n (this._loader as any) = null;\n }\n\n /** @hidden */\n public loadMaterialPropertiesAsync(context: string, material: IMaterial, babylonMaterial: Material): Nullable> {\n return GLTFLoader.LoadExtensionAsync(context, material, this.name, (extensionContext, extension) => {\n const promises = new Array>();\n promises.push(this._loader.loadMaterialPropertiesAsync(context, material, babylonMaterial));\n promises.push(this._loadSheenPropertiesAsync(extensionContext, extension, babylonMaterial));\n return Promise.all(promises).then(() => { });\n });\n }\n\n private _loadSheenPropertiesAsync(context: string, properties: IKHRMaterialsSheen, babylonMaterial: Material): Promise {\n if (!(babylonMaterial instanceof PBRMaterial)) {\n throw new Error(`${context}: Material type not supported`);\n }\n\n const promises = new Array>();\n\n babylonMaterial.sheen.isEnabled = true;\n babylonMaterial.sheen.intensity = 1;\n\n if (properties.sheenColorFactor != undefined) {\n babylonMaterial.sheen.color = Color3.FromArray(properties.sheenColorFactor);\n }\n else {\n babylonMaterial.sheen.color = Color3.Black();\n }\n\n if (properties.sheenTexture) {\n promises.push(this._loader.loadTextureInfoAsync(`${context}/sheenTexture`, properties.sheenTexture, (texture) => {\n texture.name = `${babylonMaterial.name} (Sheen Color)`;\n babylonMaterial.sheen.texture = texture;\n }));\n }\n\n if (properties.sheenRoughnessFactor !== undefined) {\n babylonMaterial.sheen.roughness = properties.sheenRoughnessFactor;\n } else {\n babylonMaterial.sheen.roughness = 0;\n }\n\n babylonMaterial.sheen.albedoScaling = true;\n\n return Promise.all(promises).then(() => { });\n }\n}\n\nGLTFLoader.RegisterExtension(NAME, (loader) => new KHR_materials_sheen(loader));","import { Nullable } from \"babylonjs/types\";\nimport { PBRMaterial } from \"babylonjs/Materials/PBR/pbrMaterial\";\nimport { Material } from \"babylonjs/Materials/material\";\n\nimport { IMaterial } from \"../glTFLoaderInterfaces\";\nimport { IGLTFLoaderExtension } from \"../glTFLoaderExtension\";\nimport { GLTFLoader } from \"../glTFLoader\";\nimport { Color3 } from 'babylonjs/Maths/math.color';\nimport { IKHRMaterialsSpecular } from 'babylonjs-gltf2interface';\n\nconst NAME = \"KHR_materials_specular\";\n\n/**\n * [Proposed Specification](https://github.com/KhronosGroup/glTF/pull/1719)\n * !!! Experimental Extension Subject to Changes !!!\n */\nexport class KHR_materials_specular implements IGLTFLoaderExtension {\n /**\n * The name of this extension.\n */\n public readonly name = NAME;\n\n /**\n * Defines whether this extension is enabled.\n */\n public enabled: boolean;\n\n /**\n * Defines a number that determines the order the extensions are applied.\n */\n public order = 190;\n\n private _loader: GLTFLoader;\n\n /** @hidden */\n constructor(loader: GLTFLoader) {\n this._loader = loader;\n this.enabled = this._loader.isExtensionUsed(NAME);\n }\n\n /** @hidden */\n public dispose() {\n (this._loader as any) = null;\n }\n\n /** @hidden */\n public loadMaterialPropertiesAsync(context: string, material: IMaterial, babylonMaterial: Material): Nullable> {\n return GLTFLoader.LoadExtensionAsync(context, material, this.name, (extensionContext, extension) => {\n const promises = new Array>();\n promises.push(this._loader.loadMaterialPropertiesAsync(context, material, babylonMaterial));\n promises.push(this._loadSpecularPropertiesAsync(extensionContext, extension, babylonMaterial));\n return Promise.all(promises).then(() => { });\n });\n }\n\n private _loadSpecularPropertiesAsync(context: string, properties: IKHRMaterialsSpecular, babylonMaterial: Material): Promise {\n if (!(babylonMaterial instanceof PBRMaterial)) {\n throw new Error(`${context}: Material type not supported`);\n }\n\n const promises = new Array>();\n\n if (properties.specularFactor !== undefined) {\n babylonMaterial.metallicF0Factor = properties.specularFactor;\n }\n\n if (properties.specularColorFactor !== undefined) {\n babylonMaterial.metallicReflectanceColor = Color3.FromArray(properties.specularColorFactor);\n }\n\n if (properties.specularTexture) {\n promises.push(this._loader.loadTextureInfoAsync(`${context}/specularTexture`, properties.specularTexture, (texture) => {\n texture.name = `${babylonMaterial.name} (Specular F0 Color)`;\n babylonMaterial.metallicReflectanceTexture = texture;\n }));\n }\n\n return Promise.all(promises).then(() => { });\n }\n}\n\nGLTFLoader.RegisterExtension(NAME, (loader) => new KHR_materials_specular(loader));","import { Nullable } from \"babylonjs/types\";\nimport { PBRMaterial } from \"babylonjs/Materials/PBR/pbrMaterial\";\nimport { Material } from \"babylonjs/Materials/material\";\nimport { BaseTexture } from \"babylonjs/Materials/Textures/baseTexture\";\nimport { IMaterial } from \"../glTFLoaderInterfaces\";\nimport { IGLTFLoaderExtension } from \"../glTFLoaderExtension\";\nimport { GLTFLoader } from \"../glTFLoader\";\nimport { IKHRMaterialsTransmission } from 'babylonjs-gltf2interface';\nimport { Scene } from \"babylonjs/scene\";\nimport { AbstractMesh } from \"babylonjs/Meshes/abstractMesh\";\nimport { Mesh } from \"babylonjs/Meshes/mesh\";\nimport { Texture } from \"babylonjs/Materials/Textures/texture\";\nimport { RenderTargetTexture } from \"babylonjs/Materials/Textures/renderTargetTexture\";\nimport { Observable } from \"babylonjs/Misc/observable\";\n\ninterface ITransmissionHelperHolder {\n /**\n * @hidden\n */\n _transmissionHelper: TransmissionHelper | undefined;\n}\n\ninterface ITransmissionHelperOptions {\n /**\n * The size of the render buffers\n */\n renderSize: number;\n}\n\n/**\n * A class to handle setting up the rendering of opaque objects to be shown through transmissive objects.\n */\nclass TransmissionHelper {\n\n /**\n * Creates the default options for the helper.\n */\n private static _getDefaultOptions(): ITransmissionHelperOptions {\n return {\n renderSize: 512\n };\n }\n\n /**\n * Stores the creation options.\n */\n private readonly _scene: Scene & ITransmissionHelperHolder;\n\n private _options: ITransmissionHelperOptions;\n\n private _opaqueRenderTarget: Nullable = null;\n private _opaqueMeshesCache: Mesh[] = [];\n private _transparentMeshesCache: Mesh[] = [];\n\n /**\n * This observable will be notified with any error during the creation of the environment,\n * mainly texture creation errors.\n */\n public onErrorObservable: Observable<{ message?: string, exception?: any }>;\n\n /**\n * constructor\n * @param options Defines the options we want to customize the helper\n * @param scene The scene to add the material to\n */\n constructor(options: Partial, scene: Scene) {\n this._options = {\n ...TransmissionHelper._getDefaultOptions(),\n ...options\n };\n this._scene = scene as any;\n this._scene._transmissionHelper = this;\n\n this.onErrorObservable = new Observable();\n this._scene.onDisposeObservable.addOnce((scene) => {\n this.dispose();\n });\n\n this._parseScene();\n this._setupRenderTargets();\n }\n\n /**\n * Updates the background according to the new options\n * @param options\n */\n public updateOptions(options: Partial) {\n // First check if any options are actually being changed. If not, exit.\n const newValues = Object.keys(options).filter((key: string) => (this._options as any)[key] !== (options as any)[key]);\n if (!newValues.length) {\n return;\n }\n\n const newOptions = {\n ...this._options,\n ...options\n };\n\n const oldOptions = this._options;\n this._options = newOptions;\n\n // If size changes, recreate everything\n if (newOptions.renderSize !== oldOptions.renderSize) {\n this._setupRenderTargets();\n }\n }\n\n public getOpaqueTarget(): Nullable {\n return this._opaqueRenderTarget;\n }\n\n private shouldRenderAsTransmission(material: Nullable): boolean {\n if (!material) {\n return false;\n }\n if (material instanceof PBRMaterial && (material.subSurface.isRefractionEnabled)) {\n return true;\n }\n return false;\n }\n\n private _addMesh(mesh: AbstractMesh): void {\n if (mesh instanceof Mesh) {\n mesh.onMaterialChangedObservable.add(this.onMeshMaterialChanged.bind(this));\n if (this.shouldRenderAsTransmission(mesh.material)) {\n this._transparentMeshesCache.push(mesh);\n } else {\n this._opaqueMeshesCache.push(mesh);\n }\n }\n }\n\n private _removeMesh(mesh: AbstractMesh): void {\n if (mesh instanceof Mesh) {\n mesh.onMaterialChangedObservable.remove(this.onMeshMaterialChanged.bind(this));\n let idx = this._transparentMeshesCache.indexOf(mesh);\n if (idx !== -1) {\n this._transparentMeshesCache.splice(idx, 1);\n }\n idx = this._opaqueMeshesCache.indexOf(mesh);\n if (idx !== -1) {\n this._opaqueMeshesCache.splice(idx, 1);\n }\n }\n }\n\n private _parseScene(): void {\n this._scene.meshes.forEach(this._addMesh.bind(this));\n // Listen for when a mesh is added to the scene and add it to our cache lists.\n this._scene.onNewMeshAddedObservable.add(this._addMesh.bind(this));\n // Listen for when a mesh is removed from to the scene and remove it from our cache lists.\n this._scene.onMeshRemovedObservable.add(this._removeMesh.bind(this));\n }\n\n // When one of the meshes in the scene has its material changed, make sure that it's in the correct cache list.\n private onMeshMaterialChanged(mesh: AbstractMesh) {\n if (mesh instanceof Mesh) {\n const transparentIdx = this._transparentMeshesCache.indexOf(mesh);\n const opaqueIdx = this._opaqueMeshesCache.indexOf(mesh);\n\n // If the material is transparent, make sure that it's added to the transparent list and removed from the opaque list\n const useTransmission = this.shouldRenderAsTransmission(mesh.material);\n if (useTransmission) {\n if (mesh.material instanceof PBRMaterial) {\n mesh.material.subSurface.refractionTexture = this._opaqueRenderTarget;\n }\n if (opaqueIdx !== -1) {\n this._opaqueMeshesCache.splice(opaqueIdx, 1);\n this._transparentMeshesCache.push(mesh);\n } else if (transparentIdx === -1) {\n this._transparentMeshesCache.push(mesh);\n }\n // If the material is opaque, make sure that it's added to the opaque list and removed from the transparent list\n } else {\n if (transparentIdx !== -1) {\n this._transparentMeshesCache.splice(transparentIdx, 1);\n this._opaqueMeshesCache.push(mesh);\n } else if (opaqueIdx === -1) {\n this._opaqueMeshesCache.push(mesh);\n }\n }\n }\n }\n\n /**\n * Setup the render targets according to the specified options.\n */\n private _setupRenderTargets(): void {\n\n let opaqueRTIndex = -1;\n\n // Remove any layers rendering to the opaque scene.\n if (this._scene.layers && this._opaqueRenderTarget) {\n for (let layer of this._scene.layers) {\n const idx = layer.renderTargetTextures.indexOf(this._opaqueRenderTarget);\n if (idx >= 0) {\n layer.renderTargetTextures.splice(idx, 1);\n }\n }\n }\n\n // Remove opaque render target\n if (this._opaqueRenderTarget) {\n opaqueRTIndex = this._scene.customRenderTargets.indexOf(this._opaqueRenderTarget);\n this._opaqueRenderTarget.dispose();\n }\n\n this._opaqueRenderTarget = new RenderTargetTexture(\"opaqueSceneTexture\", this._options.renderSize, this._scene, true);\n this._opaqueRenderTarget.renderList = this._opaqueMeshesCache;\n // this._opaqueRenderTarget.clearColor = new Color4(0.0, 0.0, 0.0, 0.0);\n this._opaqueRenderTarget.gammaSpace = true;\n this._opaqueRenderTarget.lodGenerationScale = 1;\n this._opaqueRenderTarget.lodGenerationOffset = -4;\n\n if (opaqueRTIndex >= 0) {\n this._scene.customRenderTargets.splice(opaqueRTIndex, 0, this._opaqueRenderTarget);\n } else {\n opaqueRTIndex = this._scene.customRenderTargets.length;\n this._scene.customRenderTargets.push(this._opaqueRenderTarget);\n }\n\n // If there are other layers, they should be included in the render of the opaque background.\n if (this._scene.layers && this._opaqueRenderTarget) {\n for (let layer of this._scene.layers) {\n layer.renderTargetTextures.push(this._opaqueRenderTarget);\n }\n }\n\n this._transparentMeshesCache.forEach((mesh: AbstractMesh) => {\n if (this.shouldRenderAsTransmission(mesh.material) && mesh.material instanceof PBRMaterial) {\n mesh.material.refractionTexture = this._opaqueRenderTarget;\n }\n });\n }\n\n /**\n * Dispose all the elements created by the Helper.\n */\n public dispose(): void {\n this._scene._transmissionHelper = undefined;\n if (this._opaqueRenderTarget) {\n this._opaqueRenderTarget.dispose();\n this._opaqueRenderTarget = null;\n }\n this._transparentMeshesCache = [];\n this._opaqueMeshesCache = [];\n }\n}\n\nconst NAME = \"KHR_materials_transmission\";\n\n/**\n * [Proposed Specification](https://github.com/KhronosGroup/glTF/pull/1698)\n * !!! Experimental Extension Subject to Changes !!!\n */\nexport class KHR_materials_transmission implements IGLTFLoaderExtension {\n /**\n * The name of this extension.\n */\n public readonly name = NAME;\n\n /**\n * Defines whether this extension is enabled.\n */\n public enabled: boolean;\n\n /**\n * Defines a number that determines the order the extensions are applied.\n */\n public order = 175;\n\n private _loader: GLTFLoader;\n\n /** @hidden */\n constructor(loader: GLTFLoader) {\n this._loader = loader;\n this.enabled = this._loader.isExtensionUsed(NAME);\n if (this.enabled) {\n (loader as any)._parent.transparencyAsCoverage = true;\n }\n }\n\n /** @hidden */\n public dispose() {\n (this._loader as any) = null;\n }\n\n /** @hidden */\n public loadMaterialPropertiesAsync(context: string, material: IMaterial, babylonMaterial: Material): Nullable> {\n return GLTFLoader.LoadExtensionAsync(context, material, this.name, (extensionContext, extension) => {\n const promises = new Array>();\n promises.push(this._loader.loadMaterialBasePropertiesAsync(context, material, babylonMaterial));\n promises.push(this._loader.loadMaterialPropertiesAsync(context, material, babylonMaterial));\n promises.push(this._loadTransparentPropertiesAsync(extensionContext, material, babylonMaterial, extension));\n return Promise.all(promises).then(() => { });\n });\n }\n\n private _loadTransparentPropertiesAsync(context: string, material: IMaterial, babylonMaterial: Material, extension: IKHRMaterialsTransmission): Promise {\n if (!(babylonMaterial instanceof PBRMaterial)) {\n throw new Error(`${context}: Material type not supported`);\n }\n let pbrMaterial = babylonMaterial as PBRMaterial;\n\n // Enables \"refraction\" texture which represents transmitted light.\n pbrMaterial.subSurface.isRefractionEnabled = true;\n\n // Since this extension models thin-surface transmission only, we must make IOR = 1.0\n pbrMaterial.subSurface.volumeIndexOfRefraction = 1.0;\n\n // Albedo colour will tint transmission.\n pbrMaterial.subSurface.useAlbedoToTintRefraction = true;\n\n if (extension.transmissionFactor !== undefined) {\n pbrMaterial.subSurface.refractionIntensity = extension.transmissionFactor;\n const scene = pbrMaterial.getScene() as unknown as ITransmissionHelperHolder;\n if (pbrMaterial.subSurface.refractionIntensity && !scene._transmissionHelper) {\n new TransmissionHelper({}, pbrMaterial.getScene());\n }\n } else {\n pbrMaterial.subSurface.refractionIntensity = 0.0;\n pbrMaterial.subSurface.isRefractionEnabled = false;\n return Promise.resolve();\n }\n\n if (extension.transmissionTexture) {\n return this._loader.loadTextureInfoAsync(`${context}/transmissionTexture`, extension.transmissionTexture)\n .then((texture: BaseTexture) => {\n pbrMaterial.subSurface.thicknessTexture = texture;\n pbrMaterial.subSurface.useMaskFromThicknessTexture = true;\n });\n } else {\n return Promise.resolve();\n }\n }\n}\n\nGLTFLoader.RegisterExtension(NAME, (loader) => new KHR_materials_transmission(loader));\n","import { Nullable } from \"babylonjs/types\";\r\nimport { Color3 } from \"babylonjs/Maths/math.color\";\r\nimport { PBRMaterial } from \"babylonjs/Materials/PBR/pbrMaterial\";\r\nimport { Material } from \"babylonjs/Materials/material\";\r\n\r\nimport { IMaterial } from \"../glTFLoaderInterfaces\";\r\nimport { IGLTFLoaderExtension } from \"../glTFLoaderExtension\";\r\nimport { GLTFLoader } from \"../glTFLoader\";\r\n\r\nconst NAME = \"KHR_materials_unlit\";\r\n\r\n/**\r\n * [Specification](https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_unlit)\r\n */\r\nexport class KHR_materials_unlit implements IGLTFLoaderExtension {\r\n /**\r\n * The name of this extension.\r\n */\r\n public readonly name = NAME;\r\n\r\n /**\r\n * Defines whether this extension is enabled.\r\n */\r\n public enabled: boolean;\r\n\r\n /**\r\n * Defines a number that determines the order the extensions are applied.\r\n */\r\n public order = 210;\r\n\r\n private _loader: GLTFLoader;\r\n\r\n /** @hidden */\r\n constructor(loader: GLTFLoader) {\r\n this._loader = loader;\r\n this.enabled = this._loader.isExtensionUsed(NAME);\r\n }\r\n\r\n /** @hidden */\r\n public dispose() {\r\n (this._loader as any) = null;\r\n }\r\n\r\n /** @hidden */\r\n public loadMaterialPropertiesAsync(context: string, material: IMaterial, babylonMaterial: Material): Nullable> {\r\n return GLTFLoader.LoadExtensionAsync(context, material, this.name, () => {\r\n return this._loadUnlitPropertiesAsync(context, material, babylonMaterial);\r\n });\r\n }\r\n\r\n private _loadUnlitPropertiesAsync(context: string, material: IMaterial, babylonMaterial: Material): Promise {\r\n if (!(babylonMaterial instanceof PBRMaterial)) {\r\n throw new Error(`${context}: Material type not supported`);\r\n }\r\n\r\n const promises = new Array>();\r\n babylonMaterial.unlit = true;\r\n\r\n const properties = material.pbrMetallicRoughness;\r\n if (properties) {\r\n if (properties.baseColorFactor) {\r\n babylonMaterial.albedoColor = Color3.FromArray(properties.baseColorFactor);\r\n babylonMaterial.alpha = properties.baseColorFactor[3];\r\n }\r\n else {\r\n babylonMaterial.albedoColor = Color3.White();\r\n }\r\n\r\n if (properties.baseColorTexture) {\r\n promises.push(this._loader.loadTextureInfoAsync(`${context}/baseColorTexture`, properties.baseColorTexture, (texture) => {\r\n texture.name = `${babylonMaterial.name} (Base Color)`;\r\n babylonMaterial.albedoTexture = texture;\r\n }));\r\n }\r\n }\r\n\r\n if (material.doubleSided) {\r\n babylonMaterial.backFaceCulling = false;\r\n babylonMaterial.twoSidedLighting = true;\r\n }\r\n\r\n this._loader.loadMaterialAlphaProperties(context, material, babylonMaterial);\r\n\r\n return Promise.all(promises).then(() => { });\r\n }\r\n}\r\n\r\nGLTFLoader.RegisterExtension(NAME, (loader) => new KHR_materials_unlit(loader));","import { Nullable } from \"babylonjs/types\";\nimport { IGLTFLoaderExtension } from \"../glTFLoaderExtension\";\nimport { GLTFLoader, ArrayItem } from \"../glTFLoader\";\n\nimport { Material } from 'babylonjs/Materials/material';\nimport { Mesh } from 'babylonjs/Meshes/mesh';\nimport { AbstractMesh } from 'babylonjs/Meshes/abstractMesh';\nimport { INode, IMeshPrimitive, IMesh } from '../glTFLoaderInterfaces';\nimport { IKHRMaterialVariants_Mapping, IKHRMaterialVariants_Variant, IKHRMaterialVariants_Variants } from 'babylonjs-gltf2interface';\n\nconst NAME = \"KHR_materials_variants\";\n\ninterface IVariantsMap {\n [key: string]: Array<{ mesh: AbstractMesh, material: Nullable }>;\n}\n\ninterface IExtensionMetadata {\n lastSelected: Nullable>;\n original: Array<{ mesh: AbstractMesh, material: Nullable }>;\n variants: IVariantsMap;\n}\n\n/**\n * [Proposed Specification](https://github.com/KhronosGroup/glTF/pull/1681)\n * !!! Experimental Extension Subject to Changes !!!\n */\nexport class KHR_materials_variants implements IGLTFLoaderExtension {\n /**\n * The name of this extension.\n */\n public readonly name = NAME;\n\n /**\n * Defines whether this extension is enabled.\n */\n public enabled: boolean;\n\n private _loader: GLTFLoader;\n\n private _variants?: Array;\n\n /** @hidden */\n constructor(loader: GLTFLoader) {\n this._loader = loader;\n this.enabled = this._loader.isExtensionUsed(NAME);\n }\n\n /** @hidden */\n public dispose() {\n (this._loader as any) = null;\n }\n\n /**\n * Gets the list of available variant names for this asset.\n * @param rootMesh The glTF root mesh\n * @returns the list of all the variant names for this model\n */\n public static GetAvailableVariants(rootMesh: Mesh): string[] {\n const extensionMetadata = this._GetExtensionMetadata(rootMesh);\n if (!extensionMetadata) {\n return [];\n }\n\n return Object.keys(extensionMetadata.variants);\n }\n\n /**\n * Gets the list of available variant names for this asset.\n * @param rootMesh The glTF root mesh\n * @returns the list of all the variant names for this model\n */\n public getAvailableVariants(rootMesh: Mesh): string[] {\n return KHR_materials_variants.GetAvailableVariants(rootMesh);\n }\n\n /**\n * Select a variant given a variant name or a list of variant names.\n * @param rootMesh The glTF root mesh\n * @param variantName The variant name(s) to select.\n */\n public static SelectVariant(rootMesh: Mesh, variantName: string | string[]): void {\n const extensionMetadata = this._GetExtensionMetadata(rootMesh);\n if (!extensionMetadata) {\n throw new Error(`Cannot select variant on a glTF mesh that does not have the ${NAME} extension`);\n }\n\n const select = (variantName: string): void => {\n const entries = extensionMetadata.variants[variantName];\n if (entries) {\n for (const entry of entries) {\n entry.mesh.material = entry.material;\n }\n }\n };\n\n if (variantName instanceof Array) {\n for (const name of variantName) {\n select(name);\n }\n } else {\n select(variantName);\n }\n\n extensionMetadata.lastSelected = variantName;\n }\n\n /**\n * Select a variant given a variant name or a list of variant names.\n * @param rootMesh The glTF root mesh\n * @param variantName The variant name(s) to select.\n */\n public selectVariant(rootMesh: Mesh, variantName: string | string[]): void {\n return KHR_materials_variants.SelectVariant(rootMesh, variantName);\n }\n\n /**\n * Reset back to the original before selecting a variant.\n * @param rootMesh The glTF root mesh\n */\n public static Reset(rootMesh: Mesh): void {\n const extensionMetadata = this._GetExtensionMetadata(rootMesh);\n if (!extensionMetadata) {\n throw new Error(`Cannot reset on a glTF mesh that does not have the ${NAME} extension`);\n }\n\n for (const entry of extensionMetadata.original) {\n entry.mesh.material = entry.material;\n }\n\n extensionMetadata.lastSelected = null;\n }\n\n /**\n * Reset back to the original before selecting a variant.\n * @param rootMesh The glTF root mesh\n */\n public reset(rootMesh: Mesh): void {\n return KHR_materials_variants.Reset(rootMesh);\n }\n\n /**\n * Gets the last selected variant name(s) or null if original.\n * @param rootMesh The glTF root mesh\n * @returns The selected variant name(s).\n */\n public static GetLastSelectedVariant(rootMesh: Mesh): Nullable {\n const extensionMetadata = this._GetExtensionMetadata(rootMesh);\n if (!extensionMetadata) {\n throw new Error(`Cannot get the last selected variant on a glTF mesh that does not have the ${NAME} extension`);\n }\n\n return extensionMetadata.lastSelected;\n }\n\n /**\n * Gets the last selected variant name(s) or null if original.\n * @param rootMesh The glTF root mesh\n * @returns The selected variant name(s).\n */\n public getLastSelectedVariant(rootMesh: Mesh): Nullable {\n return KHR_materials_variants.GetLastSelectedVariant(rootMesh);\n }\n\n private static _GetExtensionMetadata(rootMesh: Mesh): Nullable {\n return rootMesh?.metadata?.gltf?.[NAME] || null;\n }\n\n /** @hidden */\n public onLoading(): void {\n const extensions = this._loader.gltf.extensions;\n if (extensions && extensions[this.name]) {\n const extension = extensions[this.name] as IKHRMaterialVariants_Variants;\n this._variants = extension.variants;\n }\n }\n\n /** @hidden */\n public _loadMeshPrimitiveAsync(context: string, name: string, node: INode, mesh: IMesh, primitive: IMeshPrimitive, assign: (babylonMesh: AbstractMesh) => void): Nullable> {\n return GLTFLoader.LoadExtensionAsync(context, primitive, this.name, (extensionContext, extension) => {\n const promises = new Array>();\n promises.push(this._loader._loadMeshPrimitiveAsync(context, name, node, mesh, primitive, (babylonMesh) => {\n assign(babylonMesh);\n\n if (babylonMesh instanceof Mesh) {\n const babylonDrawMode = GLTFLoader._GetDrawMode(context, primitive.mode);\n\n const root = this._loader.rootBabylonMesh;\n const metadata = (root.metadata = root.metadata || {});\n const gltf = (metadata.gltf = metadata.gltf || {});\n const extensionMetadata: IExtensionMetadata = (gltf[NAME] = gltf[NAME] || { lastSelected: null, original: [], variants: {} });\n\n // Store the original material.\n extensionMetadata.original.push({ mesh: babylonMesh, material: babylonMesh.material });\n\n // For each mapping, look at the variants and make a new entry for them.\n const variants = extensionMetadata.variants;\n for (const mapping of extension.mappings) {\n for (const variantIndex of mapping.variants) {\n const variant = ArrayItem.Get(`${extensionContext}/mapping/${variantIndex}`, this._variants, variantIndex);\n const material = ArrayItem.Get(`#/materials/`, this._loader.gltf.materials, mapping.material);\n promises.push(this._loader._loadMaterialAsync(`#/materials/${mapping.material}`, material, babylonMesh, babylonDrawMode, (babylonMaterial) => {\n variants[variant.name] = variants[variant.name] || [];\n variants[variant.name].push({\n mesh: babylonMesh,\n material: babylonMaterial\n });\n }));\n }\n }\n }\n }));\n return Promise.all(promises).then(([babylonMesh]) => {\n return babylonMesh;\n });\n });\n }\n}\n\nGLTFLoader.RegisterExtension(NAME, (loader) => new KHR_materials_variants(loader));\n","import { IGLTFLoaderExtension } from \"../glTFLoaderExtension\";\r\nimport { GLTFLoader } from \"../glTFLoader\";\r\n\r\nconst NAME = \"KHR_mesh_quantization\";\r\n\r\n/**\r\n * [Specification](https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_mesh_quantization)\r\n */\r\nexport class KHR_mesh_quantization implements IGLTFLoaderExtension {\r\n /**\r\n * The name of this extension.\r\n */\r\n public readonly name = NAME;\r\n\r\n /**\r\n * Defines whether this extension is enabled.\r\n */\r\n public enabled: boolean;\r\n\r\n /** @hidden */\r\n constructor(loader: GLTFLoader) {\r\n this.enabled = loader.isExtensionUsed(NAME);\r\n }\r\n\r\n /** @hidden */\r\n public dispose() {\r\n }\r\n}\r\n\r\nGLTFLoader.RegisterExtension(NAME, (loader) => new KHR_mesh_quantization(loader));\r\n","import { IGLTFLoaderExtension } from \"../glTFLoaderExtension\";\r\nimport { GLTFLoader, ArrayItem } from \"../glTFLoader\";\r\nimport { ITexture } from \"../glTFLoaderInterfaces\";\r\nimport { BaseTexture } from \"babylonjs/Materials/Textures/baseTexture\";\r\nimport { Nullable } from \"babylonjs/types\";\r\nimport { IKHRTextureBasisU } from 'babylonjs-gltf2interface';\r\n\r\nconst NAME = \"KHR_texture_basisu\";\r\n\r\n/**\r\n * [Proposed Specification](https://github.com/KhronosGroup/glTF/pull/1751)\r\n * !!! Experimental Extension Subject to Changes !!!\r\n */\r\nexport class KHR_texture_basisu implements IGLTFLoaderExtension {\r\n /** The name of this extension. */\r\n public readonly name = NAME;\r\n\r\n /** Defines whether this extension is enabled. */\r\n public enabled: boolean;\r\n\r\n private _loader: GLTFLoader;\r\n\r\n /** @hidden */\r\n constructor(loader: GLTFLoader) {\r\n this._loader = loader;\r\n this.enabled = loader.isExtensionUsed(NAME);\r\n }\r\n\r\n /** @hidden */\r\n public dispose() {\r\n (this._loader as any) = null;\r\n }\r\n\r\n /** @hidden */\r\n public _loadTextureAsync(context: string, texture: ITexture, assign: (babylonTexture: BaseTexture) => void): Nullable> {\r\n return GLTFLoader.LoadExtensionAsync(context, texture, this.name, (extensionContext, extension) => {\r\n const sampler = (texture.sampler == undefined ? GLTFLoader.DefaultSampler : ArrayItem.Get(`${context}/sampler`, this._loader.gltf.samplers, texture.sampler));\r\n const image = ArrayItem.Get(`${extensionContext}/source`, this._loader.gltf.images, extension.source);\r\n return this._loader._createTextureAsync(context, sampler, image, (babylonTexture) => {\r\n assign(babylonTexture);\r\n });\r\n });\r\n }\r\n}\r\n\r\nGLTFLoader.RegisterExtension(NAME, (loader) => new KHR_texture_basisu(loader));","import { Nullable } from \"babylonjs/types\";\r\nimport { BaseTexture } from \"babylonjs/Materials/Textures/baseTexture\";\r\nimport { Texture } from \"babylonjs/Materials/Textures/texture\";\r\n\r\nimport { ITextureInfo } from \"../glTFLoaderInterfaces\";\r\nimport { IGLTFLoaderExtension } from \"../glTFLoaderExtension\";\r\nimport { GLTFLoader } from \"../glTFLoader\";\r\nimport { IKHRTextureTransform } from 'babylonjs-gltf2interface';\r\n\r\nconst NAME = \"KHR_texture_transform\";\r\n\r\n/**\r\n * [Specification](https://github.com/KhronosGroup/glTF/blob/master/extensions/2.0/Khronos/KHR_texture_transform)\r\n */\r\nexport class KHR_texture_transform implements IGLTFLoaderExtension {\r\n /**\r\n * The name of this extension.\r\n */\r\n public readonly name = NAME;\r\n\r\n /**\r\n * Defines whether this extension is enabled.\r\n */\r\n public enabled: boolean;\r\n\r\n private _loader: GLTFLoader;\r\n\r\n /** @hidden */\r\n constructor(loader: GLTFLoader) {\r\n this._loader = loader;\r\n this.enabled = this._loader.isExtensionUsed(NAME);\r\n }\r\n\r\n /** @hidden */\r\n public dispose() {\r\n (this._loader as any) = null;\r\n }\r\n\r\n /** @hidden */\r\n public loadTextureInfoAsync(context: string, textureInfo: ITextureInfo, assign: (babylonTexture: BaseTexture) => void): Nullable> {\r\n return GLTFLoader.LoadExtensionAsync(context, textureInfo, this.name, (extensionContext, extension) => {\r\n return this._loader.loadTextureInfoAsync(context, textureInfo, (babylonTexture) => {\r\n if (!(babylonTexture instanceof Texture)) {\r\n throw new Error(`${extensionContext}: Texture type not supported`);\r\n }\r\n\r\n if (extension.offset) {\r\n babylonTexture.uOffset = extension.offset[0];\r\n babylonTexture.vOffset = extension.offset[1];\r\n }\r\n\r\n // Always rotate around the origin.\r\n babylonTexture.uRotationCenter = 0;\r\n babylonTexture.vRotationCenter = 0;\r\n\r\n if (extension.rotation) {\r\n babylonTexture.wAng = -extension.rotation;\r\n }\r\n\r\n if (extension.scale) {\r\n babylonTexture.uScale = extension.scale[0];\r\n babylonTexture.vScale = extension.scale[1];\r\n }\r\n\r\n if (extension.texCoord != undefined) {\r\n babylonTexture.coordinatesIndex = extension.texCoord;\r\n }\r\n\r\n assign(babylonTexture);\r\n });\r\n });\r\n }\r\n}\r\n\r\nGLTFLoader.RegisterExtension(NAME, (loader) => new KHR_texture_transform(loader));","import { IGLTFLoaderExtension } from \"../glTFLoaderExtension\";\nimport { GLTFLoader } from \"../glTFLoader\";\nimport { IKHRXmp_Gltf, IKHRXmp_Node } from 'babylonjs-gltf2interface';\n\nconst NAME = \"KHR_xmp\";\n\n/**\n * [Proposed Specification](https://github.com/KhronosGroup/glTF/pull/1553)\n * !!! Experimental Extension Subject to Changes !!!\n */\nexport class KHR_xmp implements IGLTFLoaderExtension {\n /**\n * The name of this extension.\n */\n public readonly name = NAME;\n\n /**\n * Defines whether this extension is enabled.\n */\n public enabled: boolean;\n\n /**\n * Defines a number that determines the order the extensions are applied.\n */\n public order = 100;\n\n private _loader: GLTFLoader;\n\n /** @hidden */\n constructor(loader: GLTFLoader) {\n this._loader = loader;\n this.enabled = this._loader.isExtensionUsed(NAME);\n }\n\n /** @hidden */\n public dispose() {\n (this._loader as any) = null;\n }\n\n /**\n * Called after the loader state changes to LOADING.\n */\n public onLoading(): void {\n const xmp_gltf = (this._loader.gltf.extensions?.KHR_xmp as IKHRXmp_Gltf);\n const xmp_node = (this._loader.gltf.asset?.extensions?.KHR_xmp as IKHRXmp_Node);\n if (xmp_gltf && xmp_node) {\n const packet = +xmp_node.packet;\n if (xmp_gltf.packets && packet < xmp_gltf.packets.length) {\n this._loader.rootBabylonMesh.metadata = this._loader.rootBabylonMesh.metadata || { };\n this._loader.rootBabylonMesh.metadata.xmp = xmp_gltf.packets[packet];\n }\n }\n }\n}\n\nGLTFLoader.RegisterExtension(NAME, (loader) => new KHR_xmp(loader));","import { Nullable } from \"babylonjs/types\";\nimport { Vector3 } from \"babylonjs/Maths/math.vector\";\nimport { Tools } from \"babylonjs/Misc/tools\";\nimport { AnimationGroup } from \"babylonjs/Animations/animationGroup\";\nimport { AnimationEvent } from \"babylonjs/Animations/animationEvent\";\nimport { TransformNode } from \"babylonjs/Meshes/transformNode\";\nimport { Sound } from \"babylonjs/Audio/sound\";\nimport { WeightedSound } from \"babylonjs/Audio/weightedsound\";\n\nimport { IArrayItem, IScene, INode, IAnimation } from \"../glTFLoaderInterfaces\";\nimport { IGLTFLoaderExtension } from \"../glTFLoaderExtension\";\nimport { GLTFLoader, ArrayItem } from \"../glTFLoader\";\nimport { IMSFTAudioEmitter_Clip, IMSFTAudioEmitter_Emitter, IMSFTAudioEmitter_EmittersReference, IMSFTAudioEmitter_AnimationEvent, IMSFTAudioEmitter_AnimationEventAction } from 'babylonjs-gltf2interface';\n\nconst NAME = \"MSFT_audio_emitter\";\n\ninterface ILoaderClip extends IMSFTAudioEmitter_Clip, IArrayItem {\n _objectURL?: Promise;\n}\n\ninterface ILoaderEmitter extends IMSFTAudioEmitter_Emitter, IArrayItem {\n _babylonData?: {\n sound?: WeightedSound;\n loaded: Promise;\n };\n _babylonSounds: Sound[];\n}\n\ninterface IMSFTAudioEmitter {\n clips: ILoaderClip[];\n emitters: ILoaderEmitter[];\n}\n\ninterface ILoaderAnimationEvent extends IMSFTAudioEmitter_AnimationEvent, IArrayItem {\n}\n\ninterface ILoaderAnimationEvents {\n events: ILoaderAnimationEvent[];\n}\n\n/**\n * [Specification](https://github.com/najadojo/glTF/tree/MSFT_audio_emitter/extensions/2.0/Vendor/MSFT_audio_emitter)\n */\nexport class MSFT_audio_emitter implements IGLTFLoaderExtension {\n /**\n * The name of this extension.\n */\n public readonly name = NAME;\n\n /**\n * Defines whether this extension is enabled.\n */\n public enabled: boolean;\n\n private _loader: GLTFLoader;\n private _clips: Array;\n private _emitters: Array;\n\n /** @hidden */\n constructor(loader: GLTFLoader) {\n this._loader = loader;\n this.enabled = this._loader.isExtensionUsed(NAME);\n }\n\n /** @hidden */\n public dispose() {\n (this._loader as any) = null;\n (this._clips as any) = null;\n (this._emitters as any) = null;\n }\n\n /** @hidden */\n public onLoading(): void {\n const extensions = this._loader.gltf.extensions;\n if (extensions && extensions[this.name]) {\n const extension = extensions[this.name] as IMSFTAudioEmitter;\n\n this._clips = extension.clips;\n this._emitters = extension.emitters;\n\n ArrayItem.Assign(this._clips);\n ArrayItem.Assign(this._emitters);\n }\n }\n\n /** @hidden */\n public loadSceneAsync(context: string, scene: IScene): Nullable> {\n return GLTFLoader.LoadExtensionAsync(context, scene, this.name, (extensionContext, extension) => {\n const promises = new Array>();\n\n promises.push(this._loader.loadSceneAsync(context, scene));\n\n for (const emitterIndex of extension.emitters) {\n const emitter = ArrayItem.Get(`${extensionContext}/emitters`, this._emitters, emitterIndex);\n if (emitter.refDistance != undefined || emitter.maxDistance != undefined || emitter.rolloffFactor != undefined ||\n emitter.distanceModel != undefined || emitter.innerAngle != undefined || emitter.outerAngle != undefined) {\n throw new Error(`${extensionContext}: Direction or Distance properties are not allowed on emitters attached to a scene`);\n }\n\n promises.push(this._loadEmitterAsync(`${extensionContext}/emitters/${emitter.index}`, emitter));\n }\n\n return Promise.all(promises).then(() => { });\n });\n }\n\n /** @hidden */\n public loadNodeAsync(context: string, node: INode, assign: (babylonTransformNode: TransformNode) => void): Nullable> {\n return GLTFLoader.LoadExtensionAsync(context, node, this.name, (extensionContext, extension) => {\n const promises = new Array>();\n\n return this._loader.loadNodeAsync(extensionContext, node, (babylonMesh) => {\n for (const emitterIndex of extension.emitters) {\n const emitter = ArrayItem.Get(`${extensionContext}/emitters`, this._emitters, emitterIndex);\n promises.push(this._loadEmitterAsync(`${extensionContext}/emitters/${emitter.index}`, emitter).then(() => {\n for (const sound of emitter._babylonSounds) {\n sound.attachToMesh(babylonMesh);\n if (emitter.innerAngle != undefined || emitter.outerAngle != undefined) {\n sound.setLocalDirectionToMesh(Vector3.Forward());\n sound.setDirectionalCone(\n 2 * Tools.ToDegrees(emitter.innerAngle == undefined ? Math.PI : emitter.innerAngle),\n 2 * Tools.ToDegrees(emitter.outerAngle == undefined ? Math.PI : emitter.outerAngle),\n 0);\n }\n }\n }));\n }\n\n assign(babylonMesh);\n }).then((babylonMesh) => {\n return Promise.all(promises).then(() => {\n return babylonMesh;\n });\n });\n });\n }\n\n /** @hidden */\n public loadAnimationAsync(context: string, animation: IAnimation): Nullable> {\n return GLTFLoader.LoadExtensionAsync(context, animation, this.name, (extensionContext, extension) => {\n return this._loader.loadAnimationAsync(context, animation).then((babylonAnimationGroup) => {\n const promises = new Array>();\n\n ArrayItem.Assign(extension.events);\n for (const event of extension.events) {\n promises.push(this._loadAnimationEventAsync(`${extensionContext}/events/${event.index}`, context, animation, event, babylonAnimationGroup));\n }\n\n return Promise.all(promises).then(() => {\n return babylonAnimationGroup;\n });\n });\n });\n }\n\n private _loadClipAsync(context: string, clip: ILoaderClip): Promise {\n if (clip._objectURL) {\n return clip._objectURL;\n }\n\n let promise: Promise;\n if (clip.uri) {\n promise = this._loader.loadUriAsync(context, clip, clip.uri);\n }\n else {\n const bufferView = ArrayItem.Get(`${context}/bufferView`, this._loader.gltf.bufferViews, clip.bufferView);\n promise = this._loader.loadBufferViewAsync(`/bufferViews/${bufferView.index}`, bufferView);\n }\n\n clip._objectURL = promise.then((data) => {\n return URL.createObjectURL(new Blob([data], { type: clip.mimeType }));\n });\n\n return clip._objectURL;\n }\n\n private _loadEmitterAsync(context: string, emitter: ILoaderEmitter): Promise {\n emitter._babylonSounds = emitter._babylonSounds || [];\n if (!emitter._babylonData) {\n const clipPromises = new Array>();\n const name = emitter.name || `emitter${emitter.index}`;\n const options = {\n loop: false,\n autoplay: false,\n volume: emitter.volume == undefined ? 1 : emitter.volume,\n };\n\n for (let i = 0; i < emitter.clips.length; i++) {\n const clipContext = `/extensions/${this.name}/clips`;\n const clip = ArrayItem.Get(clipContext, this._clips, emitter.clips[i].clip);\n clipPromises.push(this._loadClipAsync(`${clipContext}/${emitter.clips[i].clip}`, clip).then((objectURL: string) => {\n const sound = emitter._babylonSounds[i] = new Sound(name, objectURL, this._loader.babylonScene, null, options);\n sound.refDistance = emitter.refDistance || 1;\n sound.maxDistance = emitter.maxDistance || 256;\n sound.rolloffFactor = emitter.rolloffFactor || 1;\n sound.distanceModel = emitter.distanceModel || 'exponential';\n sound._positionInEmitterSpace = true;\n }));\n }\n\n const promise = Promise.all(clipPromises).then(() => {\n const weights = emitter.clips.map((clip) => { return clip.weight || 1; });\n const weightedSound = new WeightedSound(emitter.loop || false, emitter._babylonSounds, weights);\n if (emitter.innerAngle) { weightedSound.directionalConeInnerAngle = 2 * Tools.ToDegrees(emitter.innerAngle); }\n if (emitter.outerAngle) { weightedSound.directionalConeOuterAngle = 2 * Tools.ToDegrees(emitter.outerAngle); }\n if (emitter.volume) { weightedSound.volume = emitter.volume; }\n emitter._babylonData!.sound = weightedSound;\n });\n\n emitter._babylonData = {\n loaded: promise\n };\n }\n\n return emitter._babylonData.loaded;\n }\n\n private _getEventAction(context: string, sound: WeightedSound, action: IMSFTAudioEmitter_AnimationEventAction, time: number, startOffset?: number): (currentFrame: number) => void {\n switch (action) {\n case IMSFTAudioEmitter_AnimationEventAction.play: {\n return (currentFrame: number) => {\n const frameOffset = (startOffset || 0) + (currentFrame - time);\n sound.play(frameOffset);\n };\n }\n case IMSFTAudioEmitter_AnimationEventAction.stop: {\n return (currentFrame: number) => {\n sound.stop();\n };\n }\n case IMSFTAudioEmitter_AnimationEventAction.pause: {\n return (currentFrame: number) => {\n sound.pause();\n };\n }\n default: {\n throw new Error(`${context}: Unsupported action ${action}`);\n }\n }\n }\n\n private _loadAnimationEventAsync(context: string, animationContext: string, animation: IAnimation, event: ILoaderAnimationEvent, babylonAnimationGroup: AnimationGroup): Promise {\n if (babylonAnimationGroup.targetedAnimations.length == 0) {\n return Promise.resolve();\n }\n const babylonAnimation = babylonAnimationGroup.targetedAnimations[0];\n const emitterIndex = event.emitter;\n const emitter = ArrayItem.Get(`/extensions/${this.name}/emitters`, this._emitters, emitterIndex);\n return this._loadEmitterAsync(context, emitter).then(() => {\n const sound = emitter._babylonData!.sound;\n if (sound) {\n var babylonAnimationEvent = new AnimationEvent(event.time, this._getEventAction(context, sound, event.action, event.time, event.startOffset));\n babylonAnimation.animation.addEvent(babylonAnimationEvent);\n // Make sure all started audio stops when this animation is terminated.\n babylonAnimationGroup.onAnimationGroupEndObservable.add(() => {\n sound.stop();\n });\n babylonAnimationGroup.onAnimationGroupPauseObservable.add(() => {\n sound.pause();\n });\n }\n });\n }\n}\n\nGLTFLoader.RegisterExtension(NAME, (loader) => new MSFT_audio_emitter(loader));","import { Nullable } from \"babylonjs/types\";\nimport { Observable } from \"babylonjs/Misc/observable\";\nimport { Deferred } from \"babylonjs/Misc/deferred\";\nimport { Material } from \"babylonjs/Materials/material\";\nimport { TransformNode } from \"babylonjs/Meshes/transformNode\";\nimport { Mesh } from \"babylonjs/Meshes/mesh\";\nimport { BaseTexture } from 'babylonjs/Materials/Textures/baseTexture';\nimport { INode, IMaterial, IBuffer, IScene } from \"../glTFLoaderInterfaces\";\nimport { IGLTFLoaderExtension } from \"../glTFLoaderExtension\";\nimport { GLTFLoader, ArrayItem } from \"../glTFLoader\";\nimport { IProperty, IMSFTLOD } from 'babylonjs-gltf2interface';\n\nconst NAME = \"MSFT_lod\";\n\ninterface IBufferInfo {\n start: number;\n end: number;\n loaded: Deferred;\n}\n\n/**\n * [Specification](https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/MSFT_lod)\n */\nexport class MSFT_lod implements IGLTFLoaderExtension {\n /**\n * The name of this extension.\n */\n public readonly name = NAME;\n\n /**\n * Defines whether this extension is enabled.\n */\n public enabled: boolean;\n\n /**\n * Defines a number that determines the order the extensions are applied.\n */\n public order = 100;\n\n /**\n * Maximum number of LODs to load, starting from the lowest LOD.\n */\n public maxLODsToLoad = 10;\n\n /**\n * Observable raised when all node LODs of one level are loaded.\n * The event data is the index of the loaded LOD starting from zero.\n * Dispose the loader to cancel the loading of the next level of LODs.\n */\n public onNodeLODsLoadedObservable = new Observable();\n\n /**\n * Observable raised when all material LODs of one level are loaded.\n * The event data is the index of the loaded LOD starting from zero.\n * Dispose the loader to cancel the loading of the next level of LODs.\n */\n public onMaterialLODsLoadedObservable = new Observable();\n\n private _loader: GLTFLoader;\n\n private _bufferLODs = new Array();\n\n private _nodeIndexLOD: Nullable = null;\n private _nodeSignalLODs = new Array>();\n private _nodePromiseLODs = new Array>>();\n private _nodeBufferLODs = new Array();\n\n private _materialIndexLOD: Nullable = null;\n private _materialSignalLODs = new Array>();\n private _materialPromiseLODs = new Array>>();\n private _materialBufferLODs = new Array();\n\n /** @hidden */\n constructor(loader: GLTFLoader) {\n this._loader = loader;\n this.enabled = this._loader.isExtensionUsed(NAME);\n }\n\n /** @hidden */\n public dispose() {\n (this._loader as any) = null;\n\n this._nodeIndexLOD = null;\n this._nodeSignalLODs.length = 0;\n this._nodePromiseLODs.length = 0;\n this._nodeBufferLODs.length = 0;\n\n this._materialIndexLOD = null;\n this._materialSignalLODs.length = 0;\n this._materialPromiseLODs.length = 0;\n this._materialBufferLODs.length = 0;\n\n this.onMaterialLODsLoadedObservable.clear();\n this.onNodeLODsLoadedObservable.clear();\n }\n\n /** @hidden */\n public onReady(): void {\n for (let indexLOD = 0; indexLOD < this._nodePromiseLODs.length; indexLOD++) {\n const promise = Promise.all(this._nodePromiseLODs[indexLOD]).then(() => {\n if (indexLOD !== 0) {\n this._loader.endPerformanceCounter(`Node LOD ${indexLOD}`);\n this._loader.log(`Loaded node LOD ${indexLOD}`);\n }\n\n this.onNodeLODsLoadedObservable.notifyObservers(indexLOD);\n\n if (indexLOD !== this._nodePromiseLODs.length - 1) {\n this._loader.startPerformanceCounter(`Node LOD ${indexLOD + 1}`);\n this._loadBufferLOD(this._nodeBufferLODs, indexLOD + 1);\n if (this._nodeSignalLODs[indexLOD]) {\n this._nodeSignalLODs[indexLOD].resolve();\n }\n }\n });\n\n this._loader._completePromises.push(promise);\n }\n\n for (let indexLOD = 0; indexLOD < this._materialPromiseLODs.length; indexLOD++) {\n const promise = Promise.all(this._materialPromiseLODs[indexLOD]).then(() => {\n if (indexLOD !== 0) {\n this._loader.endPerformanceCounter(`Material LOD ${indexLOD}`);\n this._loader.log(`Loaded material LOD ${indexLOD}`);\n }\n\n this.onMaterialLODsLoadedObservable.notifyObservers(indexLOD);\n\n if (indexLOD !== this._materialPromiseLODs.length - 1) {\n this._loader.startPerformanceCounter(`Material LOD ${indexLOD + 1}`);\n this._loadBufferLOD(this._materialBufferLODs, indexLOD + 1);\n if (this._materialSignalLODs[indexLOD]) {\n this._materialSignalLODs[indexLOD].resolve();\n }\n }\n });\n\n this._loader._completePromises.push(promise);\n }\n }\n\n /** @hidden */\n public loadSceneAsync(context: string, scene: IScene): Nullable> {\n const promise = this._loader.loadSceneAsync(context, scene);\n this._loadBufferLOD(this._bufferLODs, 0);\n return promise;\n }\n\n /** @hidden */\n public loadNodeAsync(context: string, node: INode, assign: (babylonTransformNode: TransformNode) => void): Nullable> {\n return GLTFLoader.LoadExtensionAsync(context, node, this.name, (extensionContext, extension) => {\n let firstPromise: Promise;\n\n const nodeLODs = this._getLODs(extensionContext, node, this._loader.gltf.nodes, extension.ids);\n this._loader.logOpen(`${extensionContext}`);\n\n for (let indexLOD = 0; indexLOD < nodeLODs.length; indexLOD++) {\n const nodeLOD = nodeLODs[indexLOD];\n\n if (indexLOD !== 0) {\n this._nodeIndexLOD = indexLOD;\n this._nodeSignalLODs[indexLOD] = this._nodeSignalLODs[indexLOD] || new Deferred();\n }\n\n const assign = (babylonTransformNode: TransformNode) => { babylonTransformNode.setEnabled(false); };\n const promise = this._loader.loadNodeAsync(`/nodes/${nodeLOD.index}`, nodeLOD, assign).then((babylonMesh) => {\n if (indexLOD !== 0) {\n // TODO: should not rely on _babylonTransformNode\n const previousNodeLOD = nodeLODs[indexLOD - 1];\n if (previousNodeLOD._babylonTransformNode) {\n this._disposeTransformNode(previousNodeLOD._babylonTransformNode);\n delete previousNodeLOD._babylonTransformNode;\n }\n }\n\n babylonMesh.setEnabled(true);\n return babylonMesh;\n });\n\n this._nodePromiseLODs[indexLOD] = this._nodePromiseLODs[indexLOD] || [];\n\n if (indexLOD === 0) {\n firstPromise = promise;\n }\n else {\n this._nodeIndexLOD = null;\n this._nodePromiseLODs[indexLOD].push(promise);\n }\n }\n\n this._loader.logClose();\n return firstPromise!;\n });\n }\n\n /** @hidden */\n public _loadMaterialAsync(context: string, material: IMaterial, babylonMesh: Nullable, babylonDrawMode: number, assign: (babylonMaterial: Material) => void): Nullable> {\n // Don't load material LODs if already loading a node LOD.\n if (this._nodeIndexLOD) {\n return null;\n }\n\n return GLTFLoader.LoadExtensionAsync(context, material, this.name, (extensionContext, extension) => {\n let firstPromise: Promise;\n\n const materialLODs = this._getLODs(extensionContext, material, this._loader.gltf.materials, extension.ids);\n this._loader.logOpen(`${extensionContext}`);\n\n for (let indexLOD = 0; indexLOD < materialLODs.length; indexLOD++) {\n const materialLOD = materialLODs[indexLOD];\n\n if (indexLOD !== 0) {\n this._materialIndexLOD = indexLOD;\n }\n\n const promise = this._loader._loadMaterialAsync(`/materials/${materialLOD.index}`, materialLOD, babylonMesh, babylonDrawMode, (babylonMaterial) => {\n if (indexLOD === 0) {\n assign(babylonMaterial);\n }\n }).then((babylonMaterial) => {\n if (indexLOD !== 0) {\n assign(babylonMaterial);\n\n // TODO: should not rely on _data\n const previousDataLOD = materialLODs[indexLOD - 1]._data!;\n if (previousDataLOD[babylonDrawMode]) {\n this._disposeMaterials([previousDataLOD[babylonDrawMode].babylonMaterial]);\n delete previousDataLOD[babylonDrawMode];\n }\n }\n\n return babylonMaterial;\n });\n\n this._materialPromiseLODs[indexLOD] = this._materialPromiseLODs[indexLOD] || [];\n\n if (indexLOD === 0) {\n firstPromise = promise;\n }\n else {\n this._materialIndexLOD = null;\n this._materialPromiseLODs[indexLOD].push(promise);\n }\n }\n\n this._loader.logClose();\n return firstPromise!;\n });\n }\n\n /** @hidden */\n public _loadUriAsync(context: string, property: IProperty, uri: string): Nullable> {\n // Defer the loading of uris if loading a node or material LOD.\n if (this._nodeIndexLOD !== null) {\n this._loader.log(`deferred`);\n const previousIndexLOD = this._nodeIndexLOD - 1;\n this._nodeSignalLODs[previousIndexLOD] = this._nodeSignalLODs[previousIndexLOD] || new Deferred();\n return this._nodeSignalLODs[this._nodeIndexLOD - 1].promise.then(() => {\n return this._loader.loadUriAsync(context, property, uri);\n });\n }\n else if (this._materialIndexLOD !== null) {\n this._loader.log(`deferred`);\n const previousIndexLOD = this._materialIndexLOD - 1;\n this._materialSignalLODs[previousIndexLOD] = this._materialSignalLODs[previousIndexLOD] || new Deferred();\n return this._materialSignalLODs[previousIndexLOD].promise.then(() => {\n return this._loader.loadUriAsync(context, property, uri);\n });\n }\n\n return null;\n }\n\n /** @hidden */\n public loadBufferAsync(context: string, buffer: IBuffer, byteOffset: number, byteLength: number): Nullable> {\n if (this._loader.parent.useRangeRequests && !buffer.uri) {\n if (!this._loader.bin) {\n throw new Error(`${context}: Uri is missing or the binary glTF is missing its binary chunk`);\n }\n\n const loadAsync = (bufferLODs: Array, indexLOD: number) => {\n const start = byteOffset;\n const end = start + byteLength - 1;\n let bufferLOD = bufferLODs[indexLOD];\n if (bufferLOD) {\n bufferLOD.start = Math.min(bufferLOD.start, start);\n bufferLOD.end = Math.max(bufferLOD.end, end);\n }\n else {\n bufferLOD = { start: start, end: end, loaded: new Deferred() };\n bufferLODs[indexLOD] = bufferLOD;\n }\n\n return bufferLOD.loaded.promise.then((data) => {\n return new Uint8Array(data.buffer, data.byteOffset + byteOffset - bufferLOD.start, byteLength);\n });\n };\n\n this._loader.log(`deferred`);\n\n if (this._nodeIndexLOD !== null) {\n return loadAsync(this._nodeBufferLODs, this._nodeIndexLOD);\n }\n else if (this._materialIndexLOD !== null) {\n return loadAsync(this._materialBufferLODs, this._materialIndexLOD);\n }\n else {\n return loadAsync(this._bufferLODs, 0);\n }\n }\n\n return null;\n }\n\n private _loadBufferLOD(bufferLODs: Array, indexLOD: number): void {\n const bufferLOD = bufferLODs[indexLOD];\n if (bufferLOD) {\n this._loader.log(`Loading buffer range [${bufferLOD.start}-${bufferLOD.end}]`);\n this._loader.bin!.readAsync(bufferLOD.start, bufferLOD.end - bufferLOD.start + 1).then((data) => {\n bufferLOD.loaded.resolve(data);\n }, (error) => {\n bufferLOD.loaded.reject(error);\n });\n }\n }\n\n /**\n * Gets an array of LOD properties from lowest to highest.\n */\n private _getLODs(context: string, property: T, array: ArrayLike | undefined, ids: number[]): T[] {\n if (this.maxLODsToLoad <= 0) {\n throw new Error(\"maxLODsToLoad must be greater than zero\");\n }\n\n const properties = new Array();\n\n for (let i = ids.length - 1; i >= 0; i--) {\n properties.push(ArrayItem.Get(`${context}/ids/${ids[i]}`, array, ids[i]));\n if (properties.length === this.maxLODsToLoad) {\n return properties;\n }\n }\n\n properties.push(property);\n return properties;\n }\n\n private _disposeTransformNode(babylonTransformNode: TransformNode): void {\n const babylonMaterials = new Array();\n const babylonMaterial = (babylonTransformNode as Mesh).material;\n if (babylonMaterial) {\n babylonMaterials.push(babylonMaterial);\n }\n for (const babylonMesh of babylonTransformNode.getChildMeshes()) {\n if (babylonMesh.material) {\n babylonMaterials.push(babylonMesh.material);\n }\n }\n\n babylonTransformNode.dispose();\n\n const babylonMaterialsToDispose = babylonMaterials.filter((babylonMaterial) => this._loader.babylonScene.meshes.every((mesh) => mesh.material != babylonMaterial));\n this._disposeMaterials(babylonMaterialsToDispose);\n }\n\n private _disposeMaterials(babylonMaterials: Material[]): void {\n const babylonTextures: { [uniqueId: number]: BaseTexture } = {};\n\n for (const babylonMaterial of babylonMaterials) {\n for (const babylonTexture of babylonMaterial.getActiveTextures()) {\n babylonTextures[babylonTexture.uniqueId] = babylonTexture;\n }\n\n babylonMaterial.dispose();\n }\n\n for (const uniqueId in babylonTextures) {\n for (const babylonMaterial of this._loader.babylonScene.materials) {\n if (babylonMaterial.hasTexture(babylonTextures[uniqueId])) {\n delete babylonTextures[uniqueId];\n }\n }\n }\n\n for (const uniqueId in babylonTextures) {\n babylonTextures[uniqueId].dispose();\n }\n }\n}\n\nGLTFLoader.RegisterExtension(NAME, (loader) => new MSFT_lod(loader));","import { Nullable } from \"babylonjs/types\";\r\nimport { Material } from \"babylonjs/Materials/material\";\r\nimport { PBRMaterial } from \"babylonjs/Materials/PBR/pbrMaterial\";\r\n\r\nimport { IMaterial } from \"../glTFLoaderInterfaces\";\r\nimport { IGLTFLoaderExtension } from \"../glTFLoaderExtension\";\r\nimport { GLTFLoader } from \"../glTFLoader\";\r\n\r\nconst NAME = \"MSFT_minecraftMesh\";\r\n\r\n/** @hidden */\r\nexport class MSFT_minecraftMesh implements IGLTFLoaderExtension {\r\n public readonly name = NAME;\r\n public enabled: boolean;\r\n\r\n private _loader: GLTFLoader;\r\n\r\n constructor(loader: GLTFLoader) {\r\n this._loader = loader;\r\n this.enabled = this._loader.isExtensionUsed(NAME);\r\n }\r\n\r\n public dispose() {\r\n (this._loader as any) = null;\r\n }\r\n\r\n public loadMaterialPropertiesAsync(context: string, material: IMaterial, babylonMaterial: Material): Nullable> {\r\n return GLTFLoader.LoadExtraAsync(context, material, this.name, (extraContext, extra) => {\r\n if (extra) {\r\n if (!(babylonMaterial instanceof PBRMaterial)) {\r\n throw new Error(`${extraContext}: Material type not supported`);\r\n }\r\n\r\n const promise = this._loader.loadMaterialPropertiesAsync(context, material, babylonMaterial);\r\n\r\n if (babylonMaterial.needAlphaBlending()) {\r\n babylonMaterial.forceDepthWrite = true;\r\n babylonMaterial.separateCullingPass = true;\r\n }\r\n\r\n babylonMaterial.backFaceCulling = babylonMaterial.forceDepthWrite;\r\n babylonMaterial.twoSidedLighting = true;\r\n\r\n return promise;\r\n }\r\n\r\n return null;\r\n });\r\n }\r\n}\r\n\r\nGLTFLoader.RegisterExtension(NAME, (loader) => new MSFT_minecraftMesh(loader));","import { Nullable } from \"babylonjs/types\";\r\nimport { Material } from \"babylonjs/Materials/material\";\r\nimport { PBRMaterial } from \"babylonjs/Materials/PBR/pbrMaterial\";\r\n\r\nimport { IMaterial } from \"../glTFLoaderInterfaces\";\r\nimport { IGLTFLoaderExtension } from \"../glTFLoaderExtension\";\r\nimport { GLTFLoader } from \"../glTFLoader\";\r\n\r\nconst NAME = \"MSFT_sRGBFactors\";\r\n\r\n/** @hidden */\r\nexport class MSFT_sRGBFactors implements IGLTFLoaderExtension {\r\n public readonly name = NAME;\r\n public enabled: boolean;\r\n\r\n private _loader: GLTFLoader;\r\n\r\n constructor(loader: GLTFLoader) {\r\n this._loader = loader;\r\n this.enabled = this._loader.isExtensionUsed(NAME);\r\n }\r\n\r\n public dispose() {\r\n (this._loader as any) = null;\r\n }\r\n\r\n public loadMaterialPropertiesAsync(context: string, material: IMaterial, babylonMaterial: Material): Nullable> {\r\n return GLTFLoader.LoadExtraAsync(context, material, this.name, (extraContext, extra) => {\r\n if (extra) {\r\n if (!(babylonMaterial instanceof PBRMaterial)) {\r\n throw new Error(`${extraContext}: Material type not supported`);\r\n }\r\n\r\n const promise = this._loader.loadMaterialPropertiesAsync(context, material, babylonMaterial);\r\n\r\n if (!babylonMaterial.albedoTexture) {\r\n babylonMaterial.albedoColor.toLinearSpaceToRef(babylonMaterial.albedoColor);\r\n }\r\n\r\n if (!babylonMaterial.reflectivityTexture) {\r\n babylonMaterial.reflectivityColor.toLinearSpaceToRef(babylonMaterial.reflectivityColor);\r\n }\r\n\r\n return promise;\r\n }\r\n\r\n return null;\r\n });\r\n }\r\n}\r\n\r\nGLTFLoader.RegisterExtension(NAME, (loader) => new MSFT_sRGBFactors(loader));","export * from \"./EXT_lights_image_based\";\r\nexport * from \"./EXT_mesh_gpu_instancing\";\r\nexport * from \"./EXT_texture_webp\";\r\nexport * from \"./KHR_draco_mesh_compression\";\r\nexport * from \"./KHR_lights_punctual\";\r\nexport * from \"./KHR_materials_pbrSpecularGlossiness\";\r\nexport * from \"./KHR_materials_unlit\";\r\nexport * from \"./KHR_materials_clearcoat\";\r\nexport * from \"./KHR_materials_sheen\";\r\nexport * from \"./KHR_materials_specular\";\r\nexport * from \"./KHR_materials_ior\";\r\nexport * from \"./KHR_materials_variants\";\r\nexport * from \"./KHR_materials_transmission\";\r\nexport * from \"./KHR_mesh_quantization\";\r\nexport * from \"./KHR_texture_basisu\";\r\nexport * from \"./KHR_texture_transform\";\r\nexport * from \"./KHR_xmp\";\r\nexport * from \"./MSFT_audio_emitter\";\r\nexport * from \"./MSFT_lod\";\r\nexport * from \"./MSFT_minecraftMesh\";\r\nexport * from \"./MSFT_sRGBFactors\";\r\nexport * from \"./ExtrasAsMetadata\";\r\n","import { IndicesArray, Nullable } from \"babylonjs/types\";\nimport { Deferred } from \"babylonjs/Misc/deferred\";\nimport { Quaternion, Vector3, Matrix } from \"babylonjs/Maths/math.vector\";\nimport { Color3 } from 'babylonjs/Maths/math.color';\nimport { Tools } from \"babylonjs/Misc/tools\";\nimport { Camera } from \"babylonjs/Cameras/camera\";\nimport { FreeCamera } from \"babylonjs/Cameras/freeCamera\";\nimport { AnimationGroup } from \"babylonjs/Animations/animationGroup\";\nimport { Animation } from \"babylonjs/Animations/animation\";\nimport { Bone } from \"babylonjs/Bones/bone\";\nimport { Skeleton } from \"babylonjs/Bones/skeleton\";\nimport { Material } from \"babylonjs/Materials/material\";\nimport { PBRMaterial } from \"babylonjs/Materials/PBR/pbrMaterial\";\nimport { BaseTexture } from \"babylonjs/Materials/Textures/baseTexture\";\nimport { Texture } from \"babylonjs/Materials/Textures/texture\";\nimport { TransformNode } from \"babylonjs/Meshes/transformNode\";\nimport { Buffer, VertexBuffer } from \"babylonjs/Meshes/buffer\";\nimport { Geometry } from \"babylonjs/Meshes/geometry\";\nimport { AbstractMesh } from \"babylonjs/Meshes/abstractMesh\";\nimport { InstancedMesh } from \"babylonjs/Meshes/instancedMesh\";\nimport { Mesh } from \"babylonjs/Meshes/mesh\";\nimport { MorphTarget } from \"babylonjs/Morph/morphTarget\";\nimport { MorphTargetManager } from \"babylonjs/Morph/morphTargetManager\";\nimport { ISceneLoaderProgressEvent } from \"babylonjs/Loading/sceneLoader\";\nimport { Scene } from \"babylonjs/scene\";\nimport { IProperty, AccessorType, CameraType, AnimationChannelTargetPath, AnimationSamplerInterpolation, AccessorComponentType, MaterialAlphaMode, TextureMinFilter, TextureWrapMode, TextureMagFilter, MeshPrimitiveMode } from \"babylonjs-gltf2interface\";\nimport { _IAnimationSamplerData, IGLTF, ISampler, INode, IScene, IMesh, IAccessor, ISkin, ICamera, IAnimation, IAnimationChannel, IAnimationSampler, IBuffer, IBufferView, IMaterialPbrMetallicRoughness, IMaterial, ITextureInfo, ITexture, IImage, IMeshPrimitive, IArrayItem as IArrItem, _ISamplerData } from \"./glTFLoaderInterfaces\";\nimport { IGLTFLoaderExtension } from \"./glTFLoaderExtension\";\nimport { IGLTFLoader, GLTFFileLoader, GLTFLoaderState, IGLTFLoaderData, GLTFLoaderCoordinateSystemMode, GLTFLoaderAnimationStartMode, IImportMeshAsyncOutput } from \"../glTFFileLoader\";\nimport { IAnimationKey, AnimationKeyInterpolation } from 'babylonjs/Animations/animationKey';\nimport { IAnimatable } from 'babylonjs/Animations/animatable.interface';\nimport { IDataBuffer } from 'babylonjs/Misc/dataReader';\nimport { LoadFileError } from 'babylonjs/Misc/fileTools';\nimport { Logger } from 'babylonjs/Misc/logger';\nimport { Light } from 'babylonjs/Lights/light';\nimport { TmpVectors } from 'babylonjs/Maths/math.vector';\nimport { BoundingInfo } from 'babylonjs/Culling/boundingInfo';\n\ninterface TypedArrayLike extends ArrayBufferView {\n readonly length: number;\n [n: number]: number;\n}\n\ninterface TypedArrayConstructor {\n new(length: number): TypedArrayLike;\n new(buffer: ArrayBufferLike, byteOffset: number, length?: number): TypedArrayLike;\n}\n\ninterface ILoaderProperty extends IProperty {\n _activeLoaderExtensionFunctions: {\n [id: string]: boolean\n };\n}\n\ninterface IRegisteredExtension {\n factory: (loader: GLTFLoader) => IGLTFLoaderExtension;\n}\n\n/**\n * Helper class for working with arrays when loading the glTF asset\n */\nexport class ArrayItem {\n /**\n * Gets an item from the given array.\n * @param context The context when loading the asset\n * @param array The array to get the item from\n * @param index The index to the array\n * @returns The array item\n */\n public static Get(context: string, array: ArrayLike | undefined, index: number | undefined): T {\n if (!array || index == undefined || !array[index]) {\n throw new Error(`${context}: Failed to find index (${index})`);\n }\n\n return array[index];\n }\n\n /**\n * Assign an `index` field to each item of the given array.\n * @param array The array of items\n */\n public static Assign(array?: IArrItem[]): void {\n if (array) {\n for (let index = 0; index < array.length; index++) {\n array[index].index = index;\n }\n }\n }\n}\n\n/**\n * The glTF 2.0 loader\n */\nexport class GLTFLoader implements IGLTFLoader {\n /** @hidden */\n public _completePromises = new Array>();\n\n /** @hidden */\n public _forAssetContainer = false;\n\n /** Storage */\n public _babylonLights: Light[] = [];\n\n /** @hidden */\n public _disableInstancedMesh = 0;\n\n private _disposed = false;\n private _parent: GLTFFileLoader;\n private _state: Nullable = null;\n private _extensions = new Array();\n private _rootUrl: string;\n private _fileName: string;\n private _uniqueRootUrl: string;\n private _gltf: IGLTF;\n private _bin: Nullable;\n private _babylonScene: Scene;\n private _rootBabylonMesh: Mesh;\n private _defaultBabylonMaterialData: { [drawMode: number]: Material } = {};\n\n private static _RegisteredExtensions: { [name: string]: IRegisteredExtension } = {};\n\n /**\n * The default glTF sampler.\n */\n public static readonly DefaultSampler: ISampler = { index: -1 };\n\n /**\n * Registers a loader extension.\n * @param name The name of the loader extension.\n * @param factory The factory function that creates the loader extension.\n */\n public static RegisterExtension(name: string, factory: (loader: GLTFLoader) => IGLTFLoaderExtension): void {\n if (GLTFLoader.UnregisterExtension(name)) {\n Logger.Warn(`Extension with the name '${name}' already exists`);\n }\n\n GLTFLoader._RegisteredExtensions[name] = {\n factory: factory\n };\n }\n\n /**\n * Unregisters a loader extension.\n * @param name The name of the loader extension.\n * @returns A boolean indicating whether the extension has been unregistered\n */\n public static UnregisterExtension(name: string): boolean {\n if (!GLTFLoader._RegisteredExtensions[name]) {\n return false;\n }\n\n delete GLTFLoader._RegisteredExtensions[name];\n return true;\n }\n\n /**\n * The loader state.\n */\n public get state(): Nullable {\n return this._state;\n }\n\n /**\n * The object that represents the glTF JSON.\n */\n public get gltf(): IGLTF {\n return this._gltf;\n }\n\n /**\n * The BIN chunk of a binary glTF.\n */\n public get bin(): Nullable {\n return this._bin;\n }\n\n /**\n * The parent file loader.\n */\n public get parent(): GLTFFileLoader {\n return this._parent;\n }\n\n /**\n * The Babylon scene when loading the asset.\n */\n public get babylonScene(): Scene {\n return this._babylonScene;\n }\n\n /**\n * The root Babylon mesh when loading the asset.\n */\n public get rootBabylonMesh(): Mesh {\n return this._rootBabylonMesh;\n }\n\n /** @hidden */\n constructor(parent: GLTFFileLoader) {\n this._parent = parent;\n }\n\n /** @hidden */\n public dispose(): void {\n if (this._disposed) {\n return;\n }\n\n this._disposed = true;\n\n this._completePromises.length = 0;\n\n for (const name in this._extensions) {\n const extension = this._extensions[name];\n extension.dispose && extension.dispose();\n delete this._extensions[name];\n }\n\n (this._gltf as any) = null;\n (this._babylonScene as any) = null;\n (this._rootBabylonMesh as any) = null;\n\n this._parent.dispose();\n }\n\n /** @hidden */\n public importMeshAsync(meshesNames: any, scene: Scene, forAssetContainer: boolean, data: IGLTFLoaderData, rootUrl: string, onProgress?: (event: ISceneLoaderProgressEvent) => void, fileName?: string): Promise {\n return Promise.resolve().then(() => {\n this._babylonScene = scene;\n this._rootUrl = rootUrl;\n this._fileName = fileName || \"scene\";\n this._forAssetContainer = forAssetContainer;\n this._loadData(data);\n\n let nodes: Nullable> = null;\n\n if (meshesNames) {\n const nodeMap: { [name: string]: number } = {};\n if (this._gltf.nodes) {\n for (const node of this._gltf.nodes) {\n if (node.name) {\n nodeMap[node.name] = node.index;\n }\n }\n }\n\n const names = (meshesNames instanceof Array) ? meshesNames : [meshesNames];\n nodes = names.map((name) => {\n const node = nodeMap[name];\n if (node === undefined) {\n throw new Error(`Failed to find node '${name}'`);\n }\n\n return node;\n });\n }\n\n return this._loadAsync(nodes, () => {\n return {\n meshes: this._getMeshes(),\n particleSystems: [],\n skeletons: this._getSkeletons(),\n animationGroups: this._getAnimationGroups(),\n lights: this._babylonLights,\n transformNodes: this._getTransformNodes()\n };\n });\n });\n }\n\n /** @hidden */\n public loadAsync(scene: Scene, data: IGLTFLoaderData, rootUrl: string, onProgress?: (event: ISceneLoaderProgressEvent) => void, fileName?: string): Promise {\n return Promise.resolve().then(() => {\n this._babylonScene = scene;\n this._rootUrl = rootUrl;\n this._fileName = fileName || \"scene\";\n this._loadData(data);\n return this._loadAsync(null, () => undefined);\n });\n }\n\n private _loadAsync(nodes: Nullable>, resultFunc: () => T): Promise {\n return Promise.resolve().then(() => {\n this._uniqueRootUrl = (this._rootUrl.indexOf(\"file:\") === -1 && this._fileName) ? this._rootUrl : `${this._rootUrl}${Date.now()}/`;\n\n this._loadExtensions();\n this._checkExtensions();\n\n const loadingToReadyCounterName = `${GLTFLoaderState[GLTFLoaderState.LOADING]} => ${GLTFLoaderState[GLTFLoaderState.READY]}`;\n const loadingToCompleteCounterName = `${GLTFLoaderState[GLTFLoaderState.LOADING]} => ${GLTFLoaderState[GLTFLoaderState.COMPLETE]}`;\n\n this._parent._startPerformanceCounter(loadingToReadyCounterName);\n this._parent._startPerformanceCounter(loadingToCompleteCounterName);\n\n this._setState(GLTFLoaderState.LOADING);\n this._extensionsOnLoading();\n\n const promises = new Array>();\n\n // Block the marking of materials dirty until the scene is loaded.\n const oldBlockMaterialDirtyMechanism = this._babylonScene.blockMaterialDirtyMechanism;\n this._babylonScene.blockMaterialDirtyMechanism = true;\n\n if (nodes) {\n promises.push(this.loadSceneAsync(\"/nodes\", { nodes: nodes, index: -1 }));\n }\n else if (this._gltf.scene != undefined || (this._gltf.scenes && this._gltf.scenes[0])) {\n const scene = ArrayItem.Get(`/scene`, this._gltf.scenes, this._gltf.scene || 0);\n promises.push(this.loadSceneAsync(`/scenes/${scene.index}`, scene));\n }\n\n if (this.parent.loadAllMaterials && this._gltf.materials) {\n for (let m = 0; m < this._gltf.materials.length; ++m) {\n const material = this._gltf.materials[m];\n const context = \"/materials/\" + m;\n const babylonDrawMode = Material.TriangleFillMode;\n\n promises.push(this._loadMaterialAsync(context, material, null, babylonDrawMode, (material) => { }));\n }\n }\n\n // Restore the blocking of material dirty.\n this._babylonScene.blockMaterialDirtyMechanism = oldBlockMaterialDirtyMechanism;\n\n if (this._parent.compileMaterials) {\n promises.push(this._compileMaterialsAsync());\n }\n\n if (this._parent.compileShadowGenerators) {\n promises.push(this._compileShadowGeneratorsAsync());\n }\n\n const resultPromise = Promise.all(promises).then(() => {\n if (this._rootBabylonMesh) {\n this._rootBabylonMesh.setEnabled(true);\n }\n\n this._extensionsOnReady();\n this._setState(GLTFLoaderState.READY);\n\n this._startAnimations();\n\n return resultFunc();\n });\n\n resultPromise.then(() => {\n this._parent._endPerformanceCounter(loadingToReadyCounterName);\n\n Tools.SetImmediate(() => {\n if (!this._disposed) {\n Promise.all(this._completePromises).then(() => {\n this._parent._endPerformanceCounter(loadingToCompleteCounterName);\n\n this._setState(GLTFLoaderState.COMPLETE);\n\n this._parent.onCompleteObservable.notifyObservers(undefined);\n this._parent.onCompleteObservable.clear();\n\n this.dispose();\n }, (error) => {\n this._parent.onErrorObservable.notifyObservers(error);\n this._parent.onErrorObservable.clear();\n\n this.dispose();\n });\n }\n });\n });\n\n return resultPromise;\n }).catch((error) => {\n if (!this._disposed) {\n this._parent.onErrorObservable.notifyObservers(error);\n this._parent.onErrorObservable.clear();\n\n this.dispose();\n }\n\n throw error;\n });\n }\n\n private _loadData(data: IGLTFLoaderData): void {\n this._gltf = data.json as IGLTF;\n this._setupData();\n\n if (data.bin) {\n const buffers = this._gltf.buffers;\n if (buffers && buffers[0] && !buffers[0].uri) {\n const binaryBuffer = buffers[0];\n if (binaryBuffer.byteLength < data.bin.byteLength - 3 || binaryBuffer.byteLength > data.bin.byteLength) {\n Logger.Warn(`Binary buffer length (${binaryBuffer.byteLength}) from JSON does not match chunk length (${data.bin.byteLength})`);\n }\n\n this._bin = data.bin;\n }\n else {\n Logger.Warn(\"Unexpected BIN chunk\");\n }\n }\n }\n\n private _setupData(): void {\n ArrayItem.Assign(this._gltf.accessors);\n ArrayItem.Assign(this._gltf.animations);\n ArrayItem.Assign(this._gltf.buffers);\n ArrayItem.Assign(this._gltf.bufferViews);\n ArrayItem.Assign(this._gltf.cameras);\n ArrayItem.Assign(this._gltf.images);\n ArrayItem.Assign(this._gltf.materials);\n ArrayItem.Assign(this._gltf.meshes);\n ArrayItem.Assign(this._gltf.nodes);\n ArrayItem.Assign(this._gltf.samplers);\n ArrayItem.Assign(this._gltf.scenes);\n ArrayItem.Assign(this._gltf.skins);\n ArrayItem.Assign(this._gltf.textures);\n\n if (this._gltf.nodes) {\n const nodeParents: { [index: number]: number } = {};\n for (const node of this._gltf.nodes) {\n if (node.children) {\n for (const index of node.children) {\n nodeParents[index] = node.index;\n }\n }\n }\n\n const rootNode = this._createRootNode();\n for (const node of this._gltf.nodes) {\n const parentIndex = nodeParents[node.index];\n node.parent = parentIndex === undefined ? rootNode : this._gltf.nodes[parentIndex];\n }\n }\n }\n\n private _loadExtensions(): void {\n for (const name in GLTFLoader._RegisteredExtensions) {\n const extension = GLTFLoader._RegisteredExtensions[name].factory(this);\n if (extension.name !== name) {\n Logger.Warn(`The name of the glTF loader extension instance does not match the registered name: ${extension.name} !== ${name}`);\n }\n\n this._extensions.push(extension);\n this._parent.onExtensionLoadedObservable.notifyObservers(extension);\n }\n\n this._extensions.sort((a, b) => (a.order || Number.MAX_VALUE) - (b.order || Number.MAX_VALUE));\n this._parent.onExtensionLoadedObservable.clear();\n }\n\n private _checkExtensions(): void {\n if (this._gltf.extensionsRequired) {\n for (const name of this._gltf.extensionsRequired) {\n const available = this._extensions.some((extension) => extension.name === name && extension.enabled);\n if (!available) {\n throw new Error(`Require extension ${name} is not available`);\n }\n }\n }\n }\n\n private _setState(state: GLTFLoaderState): void {\n this._state = state;\n this.log(GLTFLoaderState[this._state]);\n }\n\n private _createRootNode(): INode {\n this._babylonScene._blockEntityCollection = this._forAssetContainer;\n this._rootBabylonMesh = new Mesh(\"__root__\", this._babylonScene);\n this._babylonScene._blockEntityCollection = false;\n this._rootBabylonMesh.setEnabled(false);\n\n const rootNode: INode = {\n _babylonTransformNode: this._rootBabylonMesh,\n index: -1\n };\n\n switch (this._parent.coordinateSystemMode) {\n case GLTFLoaderCoordinateSystemMode.AUTO: {\n if (!this._babylonScene.useRightHandedSystem) {\n rootNode.rotation = [0, 1, 0, 0];\n rootNode.scale = [1, 1, -1];\n GLTFLoader._LoadTransform(rootNode, this._rootBabylonMesh);\n }\n break;\n }\n case GLTFLoaderCoordinateSystemMode.FORCE_RIGHT_HANDED: {\n this._babylonScene.useRightHandedSystem = true;\n break;\n }\n default: {\n throw new Error(`Invalid coordinate system mode (${this._parent.coordinateSystemMode})`);\n }\n }\n\n this._parent.onMeshLoadedObservable.notifyObservers(this._rootBabylonMesh);\n return rootNode;\n }\n\n /**\n * Loads a glTF scene.\n * @param context The context when loading the asset\n * @param scene The glTF scene property\n * @returns A promise that resolves when the load is complete\n */\n public loadSceneAsync(context: string, scene: IScene): Promise {\n const extensionPromise = this._extensionsLoadSceneAsync(context, scene);\n if (extensionPromise) {\n return extensionPromise;\n }\n\n const promises = new Array>();\n\n this.logOpen(`${context} ${scene.name || \"\"}`);\n\n if (scene.nodes) {\n for (let index of scene.nodes) {\n const node = ArrayItem.Get(`${context}/nodes/${index}`, this._gltf.nodes, index);\n promises.push(this.loadNodeAsync(`/nodes/${node.index}`, node, (babylonMesh) => {\n babylonMesh.parent = this._rootBabylonMesh;\n }));\n }\n }\n\n // Link all Babylon bones for each glTF node with the corresponding Babylon transform node.\n // A glTF joint is a pointer to a glTF node in the glTF node hierarchy similar to Unity3D.\n if (this._gltf.nodes) {\n for (const node of this._gltf.nodes) {\n if (node._babylonTransformNode && node._babylonBones) {\n for (const babylonBone of node._babylonBones) {\n babylonBone.linkTransformNode(node._babylonTransformNode);\n }\n }\n }\n }\n\n promises.push(this._loadAnimationsAsync());\n\n this.logClose();\n\n return Promise.all(promises).then(() => { });\n }\n\n private _forEachPrimitive(node: INode, callback: (babylonMesh: AbstractMesh) => void): void {\n if (node._primitiveBabylonMeshes) {\n for (const babylonMesh of node._primitiveBabylonMeshes) {\n callback(babylonMesh);\n }\n }\n }\n\n private _getMeshes(): AbstractMesh[] {\n const meshes = new Array();\n\n // Root mesh is always first.\n meshes.push(this._rootBabylonMesh);\n\n const nodes = this._gltf.nodes;\n if (nodes) {\n for (const node of nodes) {\n this._forEachPrimitive(node, (babylonMesh) => {\n meshes.push(babylonMesh);\n });\n }\n }\n\n return meshes;\n }\n\n private _getTransformNodes(): TransformNode[] {\n const transformNodes = new Array();\n\n const nodes = this._gltf.nodes;\n if (nodes) {\n for (const node of nodes) {\n if (node._babylonTransformNode && node._babylonTransformNode.getClassName() === \"TransformNode\") {\n transformNodes.push(node._babylonTransformNode);\n }\n }\n }\n\n return transformNodes;\n }\n\n private _getSkeletons(): Skeleton[] {\n const skeletons = new Array();\n\n const skins = this._gltf.skins;\n if (skins) {\n for (const skin of skins) {\n if (skin._data) {\n skeletons.push(skin._data.babylonSkeleton);\n }\n }\n }\n\n return skeletons;\n }\n\n private _getAnimationGroups(): AnimationGroup[] {\n const animationGroups = new Array();\n\n const animations = this._gltf.animations;\n if (animations) {\n for (const animation of animations) {\n if (animation._babylonAnimationGroup) {\n animationGroups.push(animation._babylonAnimationGroup);\n }\n }\n }\n\n return animationGroups;\n }\n\n private _startAnimations(): void {\n switch (this._parent.animationStartMode) {\n case GLTFLoaderAnimationStartMode.NONE: {\n // do nothing\n break;\n }\n case GLTFLoaderAnimationStartMode.FIRST: {\n const babylonAnimationGroups = this._getAnimationGroups();\n if (babylonAnimationGroups.length !== 0) {\n babylonAnimationGroups[0].start(true);\n }\n break;\n }\n case GLTFLoaderAnimationStartMode.ALL: {\n const babylonAnimationGroups = this._getAnimationGroups();\n for (const babylonAnimationGroup of babylonAnimationGroups) {\n babylonAnimationGroup.start(true);\n }\n break;\n }\n default: {\n Logger.Error(`Invalid animation start mode (${this._parent.animationStartMode})`);\n return;\n }\n }\n }\n\n /**\n * Loads a glTF node.\n * @param context The context when loading the asset\n * @param node The glTF node property\n * @param assign A function called synchronously after parsing the glTF properties\n * @returns A promise that resolves with the loaded Babylon mesh when the load is complete\n */\n public loadNodeAsync(context: string, node: INode, assign: (babylonTransformNode: TransformNode) => void = () => { }): Promise {\n const extensionPromise = this._extensionsLoadNodeAsync(context, node, assign);\n if (extensionPromise) {\n return extensionPromise;\n }\n\n if (node._babylonTransformNode) {\n throw new Error(`${context}: Invalid recursive node hierarchy`);\n }\n\n const promises = new Array>();\n\n this.logOpen(`${context} ${node.name || \"\"}`);\n\n const loadNode = (babylonTransformNode: TransformNode) => {\n GLTFLoader.AddPointerMetadata(babylonTransformNode, context);\n GLTFLoader._LoadTransform(node, babylonTransformNode);\n\n if (node.camera != undefined) {\n const camera = ArrayItem.Get(`${context}/camera`, this._gltf.cameras, node.camera);\n promises.push(this.loadCameraAsync(`/cameras/${camera.index}`, camera, (babylonCamera) => {\n babylonCamera.parent = babylonTransformNode;\n }));\n }\n\n if (node.children) {\n for (const index of node.children) {\n const childNode = ArrayItem.Get(`${context}/children/${index}`, this._gltf.nodes, index);\n promises.push(this.loadNodeAsync(`/nodes/${childNode.index}`, childNode, (childBabylonMesh) => {\n childBabylonMesh.parent = babylonTransformNode;\n }));\n }\n }\n\n assign(babylonTransformNode);\n };\n\n if (node.mesh == undefined) {\n const nodeName = node.name || `node${node.index}`;\n this._babylonScene._blockEntityCollection = this._forAssetContainer;\n node._babylonTransformNode = new TransformNode(nodeName, this._babylonScene);\n this._babylonScene._blockEntityCollection = false;\n loadNode(node._babylonTransformNode);\n }\n else {\n const mesh = ArrayItem.Get(`${context}/mesh`, this._gltf.meshes, node.mesh);\n promises.push(this._loadMeshAsync(`/meshes/${mesh.index}`, node, mesh, loadNode));\n }\n\n this.logClose();\n\n return Promise.all(promises).then(() => {\n this._forEachPrimitive(node, (babylonMesh) => {\n if ((babylonMesh as Mesh).geometry && (babylonMesh as Mesh).geometry!.useBoundingInfoFromGeometry) {\n // simply apply the world matrices to the bounding info - the extends are already ok\n babylonMesh._updateBoundingInfo();\n } else {\n babylonMesh.refreshBoundingInfo(true);\n }\n });\n\n return node._babylonTransformNode!;\n });\n }\n\n private _loadMeshAsync(context: string, node: INode, mesh: IMesh, assign: (babylonTransformNode: TransformNode) => void): Promise {\n const primitives = mesh.primitives;\n if (!primitives || !primitives.length) {\n throw new Error(`${context}: Primitives are missing`);\n }\n\n if (primitives[0].index == undefined) {\n ArrayItem.Assign(primitives);\n }\n\n const promises = new Array>();\n\n this.logOpen(`${context} ${mesh.name || \"\"}`);\n\n const name = node.name || `node${node.index}`;\n\n if (primitives.length === 1) {\n const primitive = mesh.primitives[0];\n promises.push(this._loadMeshPrimitiveAsync(`${context}/primitives/${primitive.index}`, name, node, mesh, primitive, (babylonMesh) => {\n node._babylonTransformNode = babylonMesh;\n node._primitiveBabylonMeshes = [babylonMesh];\n }));\n }\n else {\n this._babylonScene._blockEntityCollection = this._forAssetContainer;\n node._babylonTransformNode = new TransformNode(name, this._babylonScene);\n this._babylonScene._blockEntityCollection = false;\n node._primitiveBabylonMeshes = [];\n for (const primitive of primitives) {\n promises.push(this._loadMeshPrimitiveAsync(`${context}/primitives/${primitive.index}`, `${name}_primitive${primitive.index}`, node, mesh, primitive, (babylonMesh) => {\n babylonMesh.parent = node._babylonTransformNode!;\n node._primitiveBabylonMeshes!.push(babylonMesh);\n }));\n }\n }\n\n if (node.skin != undefined) {\n const skin = ArrayItem.Get(`${context}/skin`, this._gltf.skins, node.skin);\n promises.push(this._loadSkinAsync(`/skins/${skin.index}`, node, skin));\n }\n\n assign(node._babylonTransformNode!);\n\n this.logClose();\n\n return Promise.all(promises).then(() => {\n return node._babylonTransformNode!;\n });\n }\n\n /**\n * @hidden Define this method to modify the default behavior when loading data for mesh primitives.\n * @param context The context when loading the asset\n * @param name The mesh name when loading the asset\n * @param node The glTF node when loading the asset\n * @param mesh The glTF mesh when loading the asset\n * @param primitive The glTF mesh primitive property\n * @param assign A function called synchronously after parsing the glTF properties\n * @returns A promise that resolves with the loaded mesh when the load is complete or null if not handled\n */\n public _loadMeshPrimitiveAsync(context: string, name: string, node: INode, mesh: IMesh, primitive: IMeshPrimitive, assign: (babylonMesh: AbstractMesh) => void): Promise {\n const extensionPromise = this._extensionsLoadMeshPrimitiveAsync(context, name, node, mesh, primitive, assign);\n if (extensionPromise) {\n return extensionPromise;\n }\n\n this.logOpen(`${context}`);\n\n const shouldInstance = (this._disableInstancedMesh === 0) && this._parent.createInstances && (node.skin == undefined && !mesh.primitives[0].targets);\n\n let babylonAbstractMesh: AbstractMesh;\n let promise: Promise;\n\n if (shouldInstance && primitive._instanceData) {\n babylonAbstractMesh = primitive._instanceData.babylonSourceMesh.createInstance(name) as InstancedMesh;\n promise = primitive._instanceData.promise;\n }\n else {\n const promises = new Array>();\n\n this._babylonScene._blockEntityCollection = this._forAssetContainer;\n const babylonMesh = new Mesh(name, this._babylonScene);\n this._babylonScene._blockEntityCollection = false;\n babylonMesh.overrideMaterialSideOrientation = this._babylonScene.useRightHandedSystem ? Material.CounterClockWiseSideOrientation : Material.ClockWiseSideOrientation;\n\n this._createMorphTargets(context, node, mesh, primitive, babylonMesh);\n promises.push(this._loadVertexDataAsync(context, primitive, babylonMesh).then((babylonGeometry) => {\n return this._loadMorphTargetsAsync(context, primitive, babylonMesh, babylonGeometry).then(() => {\n babylonGeometry.applyToMesh(babylonMesh);\n });\n }));\n\n const babylonDrawMode = GLTFLoader._GetDrawMode(context, primitive.mode);\n if (primitive.material == undefined) {\n let babylonMaterial = this._defaultBabylonMaterialData[babylonDrawMode];\n if (!babylonMaterial) {\n babylonMaterial = this._createDefaultMaterial(\"__GLTFLoader._default\", babylonDrawMode);\n this._parent.onMaterialLoadedObservable.notifyObservers(babylonMaterial);\n this._defaultBabylonMaterialData[babylonDrawMode] = babylonMaterial;\n }\n babylonMesh.material = babylonMaterial;\n }\n else {\n const material = ArrayItem.Get(`${context}/material`, this._gltf.materials, primitive.material);\n promises.push(this._loadMaterialAsync(`/materials/${material.index}`, material, babylonMesh, babylonDrawMode, (babylonMaterial) => {\n babylonMesh.material = babylonMaterial;\n }));\n }\n\n promise = Promise.all(promises);\n\n if (shouldInstance) {\n primitive._instanceData = {\n babylonSourceMesh: babylonMesh,\n promise: promise\n };\n }\n\n babylonAbstractMesh = babylonMesh;\n }\n\n GLTFLoader.AddPointerMetadata(babylonAbstractMesh, context);\n this._parent.onMeshLoadedObservable.notifyObservers(babylonAbstractMesh);\n assign(babylonAbstractMesh);\n\n this.logClose();\n\n return promise.then(() => {\n return babylonAbstractMesh;\n });\n }\n\n private _loadVertexDataAsync(context: string, primitive: IMeshPrimitive, babylonMesh: Mesh): Promise {\n const extensionPromise = this._extensionsLoadVertexDataAsync(context, primitive, babylonMesh);\n if (extensionPromise) {\n return extensionPromise;\n }\n\n const attributes = primitive.attributes;\n if (!attributes) {\n throw new Error(`${context}: Attributes are missing`);\n }\n\n const promises = new Array>();\n\n const babylonGeometry = new Geometry(babylonMesh.name, this._babylonScene);\n\n if (primitive.indices == undefined) {\n babylonMesh.isUnIndexed = true;\n }\n else {\n const accessor = ArrayItem.Get(`${context}/indices`, this._gltf.accessors, primitive.indices);\n promises.push(this._loadIndicesAccessorAsync(`/accessors/${accessor.index}`, accessor).then((data) => {\n babylonGeometry.setIndices(data);\n }));\n }\n\n const loadAttribute = (attribute: string, kind: string, callback?: (accessor: IAccessor) => void) => {\n if (attributes[attribute] == undefined) {\n return;\n }\n\n babylonMesh._delayInfo = babylonMesh._delayInfo || [];\n if (babylonMesh._delayInfo.indexOf(kind) === -1) {\n babylonMesh._delayInfo.push(kind);\n }\n\n const accessor = ArrayItem.Get(`${context}/attributes/${attribute}`, this._gltf.accessors, attributes[attribute]);\n promises.push(this._loadVertexAccessorAsync(`/accessors/${accessor.index}`, accessor, kind).then((babylonVertexBuffer) => {\n if (babylonVertexBuffer.getKind() === VertexBuffer.PositionKind && !this.parent.alwaysComputeBoundingBox && !babylonMesh.skeleton) {\n const mmin = accessor.min as [number, number, number], mmax = accessor.max as [number, number, number];\n if (mmin !== undefined && mmax !== undefined) {\n const min = TmpVectors.Vector3[0], max = TmpVectors.Vector3[1];\n min.copyFromFloats(...mmin);\n max.copyFromFloats(...mmax);\n babylonGeometry._boundingInfo = new BoundingInfo(min, max);\n babylonGeometry.useBoundingInfoFromGeometry = true;\n }\n }\n babylonGeometry.setVerticesBuffer(babylonVertexBuffer, accessor.count);\n }));\n\n if (kind == VertexBuffer.MatricesIndicesExtraKind) {\n babylonMesh.numBoneInfluencers = 8;\n }\n\n if (callback) {\n callback(accessor);\n }\n };\n\n loadAttribute(\"POSITION\", VertexBuffer.PositionKind);\n loadAttribute(\"NORMAL\", VertexBuffer.NormalKind);\n loadAttribute(\"TANGENT\", VertexBuffer.TangentKind);\n loadAttribute(\"TEXCOORD_0\", VertexBuffer.UVKind);\n loadAttribute(\"TEXCOORD_1\", VertexBuffer.UV2Kind);\n loadAttribute(\"JOINTS_0\", VertexBuffer.MatricesIndicesKind);\n loadAttribute(\"WEIGHTS_0\", VertexBuffer.MatricesWeightsKind);\n loadAttribute(\"JOINTS_1\", VertexBuffer.MatricesIndicesExtraKind);\n loadAttribute(\"WEIGHTS_1\", VertexBuffer.MatricesWeightsExtraKind);\n loadAttribute(\"COLOR_0\", VertexBuffer.ColorKind, (accessor) => {\n if (accessor.type === AccessorType.VEC4) {\n babylonMesh.hasVertexAlpha = true;\n }\n });\n\n return Promise.all(promises).then(() => {\n return babylonGeometry;\n });\n }\n\n private _createMorphTargets(context: string, node: INode, mesh: IMesh, primitive: IMeshPrimitive, babylonMesh: Mesh): void {\n if (!primitive.targets) {\n return;\n }\n\n if (node._numMorphTargets == undefined) {\n node._numMorphTargets = primitive.targets.length;\n }\n else if (primitive.targets.length !== node._numMorphTargets) {\n throw new Error(`${context}: Primitives do not have the same number of targets`);\n }\n\n const targetNames = mesh.extras ? mesh.extras.targetNames : null;\n\n babylonMesh.morphTargetManager = new MorphTargetManager(babylonMesh.getScene());\n for (let index = 0; index < primitive.targets.length; index++) {\n const weight = node.weights ? node.weights[index] : mesh.weights ? mesh.weights[index] : 0;\n const name = targetNames ? targetNames[index] : `morphTarget${index}`;\n babylonMesh.morphTargetManager.addTarget(new MorphTarget(name, weight, babylonMesh.getScene()));\n // TODO: tell the target whether it has positions, normals, tangents\n }\n }\n\n private _loadMorphTargetsAsync(context: string, primitive: IMeshPrimitive, babylonMesh: Mesh, babylonGeometry: Geometry): Promise {\n if (!primitive.targets) {\n return Promise.resolve();\n }\n\n const promises = new Array>();\n\n const morphTargetManager = babylonMesh.morphTargetManager!;\n for (let index = 0; index < morphTargetManager.numTargets; index++) {\n const babylonMorphTarget = morphTargetManager.getTarget(index);\n promises.push(this._loadMorphTargetVertexDataAsync(`${context}/targets/${index}`, babylonGeometry, primitive.targets[index], babylonMorphTarget));\n }\n\n return Promise.all(promises).then(() => { });\n }\n\n private _loadMorphTargetVertexDataAsync(context: string, babylonGeometry: Geometry, attributes: { [name: string]: number }, babylonMorphTarget: MorphTarget): Promise {\n const promises = new Array>();\n\n const loadAttribute = (attribute: string, kind: string, setData: (babylonVertexBuffer: VertexBuffer, data: Float32Array) => void) => {\n if (attributes[attribute] == undefined) {\n return;\n }\n\n const babylonVertexBuffer = babylonGeometry.getVertexBuffer(kind);\n if (!babylonVertexBuffer) {\n return;\n }\n\n const accessor = ArrayItem.Get(`${context}/${attribute}`, this._gltf.accessors, attributes[attribute]);\n promises.push(this._loadFloatAccessorAsync(`/accessors/${accessor.index}`, accessor).then((data) => {\n setData(babylonVertexBuffer, data);\n }));\n };\n\n loadAttribute(\"POSITION\", VertexBuffer.PositionKind, (babylonVertexBuffer, data) => {\n const positions = new Float32Array(data.length);\n babylonVertexBuffer.forEach(data.length, (value, index) => {\n positions[index] = data[index] + value;\n });\n\n babylonMorphTarget.setPositions(positions);\n });\n\n loadAttribute(\"NORMAL\", VertexBuffer.NormalKind, (babylonVertexBuffer, data) => {\n const normals = new Float32Array(data.length);\n babylonVertexBuffer.forEach(normals.length, (value, index) => {\n normals[index] = data[index] + value;\n });\n\n babylonMorphTarget.setNormals(normals);\n });\n\n loadAttribute(\"TANGENT\", VertexBuffer.TangentKind, (babylonVertexBuffer, data) => {\n const tangents = new Float32Array(data.length / 3 * 4);\n let dataIndex = 0;\n babylonVertexBuffer.forEach(data.length / 3 * 4, (value, index) => {\n // Tangent data for morph targets is stored as xyz delta.\n // The vertexData.tangent is stored as xyzw.\n // So we need to skip every fourth vertexData.tangent.\n if (((index + 1) % 4) !== 0) {\n tangents[dataIndex] = data[dataIndex] + value;\n dataIndex++;\n }\n });\n babylonMorphTarget.setTangents(tangents);\n });\n\n return Promise.all(promises).then(() => { });\n }\n\n private static _LoadTransform(node: INode, babylonNode: TransformNode): void {\n // Ignore the TRS of skinned nodes.\n // See https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#skins (second implementation note)\n if (node.skin != undefined) {\n return;\n }\n\n let position = Vector3.Zero();\n let rotation = Quaternion.Identity();\n let scaling = Vector3.One();\n\n if (node.matrix) {\n const matrix = Matrix.FromArray(node.matrix);\n matrix.decompose(scaling, rotation, position);\n }\n else {\n if (node.translation) { position = Vector3.FromArray(node.translation); }\n if (node.rotation) { rotation = Quaternion.FromArray(node.rotation); }\n if (node.scale) { scaling = Vector3.FromArray(node.scale); }\n }\n\n babylonNode.position = position;\n babylonNode.rotationQuaternion = rotation;\n babylonNode.scaling = scaling;\n }\n\n private _loadSkinAsync(context: string, node: INode, skin: ISkin): Promise {\n const extensionPromise = this._extensionsLoadSkinAsync(context, node, skin);\n if (extensionPromise) {\n return extensionPromise;\n }\n\n const assignSkeleton = (skeleton: Skeleton) => {\n this._forEachPrimitive(node, (babylonMesh) => {\n babylonMesh.skeleton = skeleton;\n });\n };\n\n if (skin._data) {\n assignSkeleton(skin._data.babylonSkeleton);\n return skin._data.promise;\n }\n\n const skeletonId = `skeleton${skin.index}`;\n this._babylonScene._blockEntityCollection = this._forAssetContainer;\n const babylonSkeleton = new Skeleton(skin.name || skeletonId, skeletonId, this._babylonScene);\n this._babylonScene._blockEntityCollection = false;\n\n // See https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#skins (second implementation note)\n babylonSkeleton.overrideMesh = this._rootBabylonMesh;\n\n this._loadBones(context, skin, babylonSkeleton);\n assignSkeleton(babylonSkeleton);\n\n const promise = this._loadSkinInverseBindMatricesDataAsync(context, skin).then((inverseBindMatricesData) => {\n this._updateBoneMatrices(babylonSkeleton, inverseBindMatricesData);\n });\n\n skin._data = {\n babylonSkeleton: babylonSkeleton,\n promise: promise\n };\n\n return promise;\n }\n\n private _loadBones(context: string, skin: ISkin, babylonSkeleton: Skeleton): void {\n const babylonBones: { [index: number]: Bone } = {};\n for (const index of skin.joints) {\n const node = ArrayItem.Get(`${context}/joints/${index}`, this._gltf.nodes, index);\n this._loadBone(node, skin, babylonSkeleton, babylonBones);\n }\n }\n\n private _loadBone(node: INode, skin: ISkin, babylonSkeleton: Skeleton, babylonBones: { [index: number]: Bone }): Bone {\n let babylonBone = babylonBones[node.index];\n if (babylonBone) {\n return babylonBone;\n }\n\n let babylonParentBone: Nullable = null;\n if (node.parent && node.parent._babylonTransformNode !== this._rootBabylonMesh) {\n babylonParentBone = this._loadBone(node.parent, skin, babylonSkeleton, babylonBones);\n }\n\n const boneIndex = skin.joints.indexOf(node.index);\n\n babylonBone = new Bone(node.name || `joint${node.index}`, babylonSkeleton, babylonParentBone, this._getNodeMatrix(node), null, null, boneIndex);\n babylonBones[node.index] = babylonBone;\n\n node._babylonBones = node._babylonBones || [];\n node._babylonBones.push(babylonBone);\n\n return babylonBone;\n }\n\n private _loadSkinInverseBindMatricesDataAsync(context: string, skin: ISkin): Promise> {\n if (skin.inverseBindMatrices == undefined) {\n return Promise.resolve(null);\n }\n\n const accessor = ArrayItem.Get(`${context}/inverseBindMatrices`, this._gltf.accessors, skin.inverseBindMatrices);\n return this._loadFloatAccessorAsync(`/accessors/${accessor.index}`, accessor);\n }\n\n private _updateBoneMatrices(babylonSkeleton: Skeleton, inverseBindMatricesData: Nullable): void {\n for (const babylonBone of babylonSkeleton.bones) {\n let baseMatrix = Matrix.Identity();\n const boneIndex = babylonBone._index!;\n if (inverseBindMatricesData && boneIndex !== -1) {\n Matrix.FromArrayToRef(inverseBindMatricesData, boneIndex * 16, baseMatrix);\n baseMatrix.invertToRef(baseMatrix);\n }\n\n const babylonParentBone = babylonBone.getParent();\n if (babylonParentBone) {\n baseMatrix.multiplyToRef(babylonParentBone.getInvertedAbsoluteTransform(), baseMatrix);\n }\n\n babylonBone.setBindPose(baseMatrix);\n\n babylonBone.updateMatrix(baseMatrix, false, false);\n babylonBone._updateDifferenceMatrix(undefined, false);\n }\n }\n\n private _getNodeMatrix(node: INode): Matrix {\n return node.matrix ?\n Matrix.FromArray(node.matrix) :\n Matrix.Compose(\n node.scale ? Vector3.FromArray(node.scale) : Vector3.One(),\n node.rotation ? Quaternion.FromArray(node.rotation) : Quaternion.Identity(),\n node.translation ? Vector3.FromArray(node.translation) : Vector3.Zero());\n }\n\n /**\n * Loads a glTF camera.\n * @param context The context when loading the asset\n * @param camera The glTF camera property\n * @param assign A function called synchronously after parsing the glTF properties\n * @returns A promise that resolves with the loaded Babylon camera when the load is complete\n */\n public loadCameraAsync(context: string, camera: ICamera, assign: (babylonCamera: Camera) => void = () => { }): Promise {\n const extensionPromise = this._extensionsLoadCameraAsync(context, camera, assign);\n if (extensionPromise) {\n return extensionPromise;\n }\n\n const promises = new Array>();\n\n this.logOpen(`${context} ${camera.name || \"\"}`);\n\n this._babylonScene._blockEntityCollection = this._forAssetContainer;\n const babylonCamera = new FreeCamera(camera.name || `camera${camera.index}`, Vector3.Zero(), this._babylonScene, false);\n this._babylonScene._blockEntityCollection = false;\n babylonCamera.ignoreParentScaling = true;\n\n babylonCamera.rotation = new Vector3(0, Math.PI, 0);\n\n switch (camera.type) {\n case CameraType.PERSPECTIVE: {\n const perspective = camera.perspective;\n if (!perspective) {\n throw new Error(`${context}: Camera perspective properties are missing`);\n }\n\n babylonCamera.fov = perspective.yfov;\n babylonCamera.minZ = perspective.znear;\n babylonCamera.maxZ = perspective.zfar || Number.MAX_VALUE;\n break;\n }\n case CameraType.ORTHOGRAPHIC: {\n if (!camera.orthographic) {\n throw new Error(`${context}: Camera orthographic properties are missing`);\n }\n\n babylonCamera.mode = Camera.ORTHOGRAPHIC_CAMERA;\n babylonCamera.orthoLeft = -camera.orthographic.xmag;\n babylonCamera.orthoRight = camera.orthographic.xmag;\n babylonCamera.orthoBottom = -camera.orthographic.ymag;\n babylonCamera.orthoTop = camera.orthographic.ymag;\n babylonCamera.minZ = camera.orthographic.znear;\n babylonCamera.maxZ = camera.orthographic.zfar;\n break;\n }\n default: {\n throw new Error(`${context}: Invalid camera type (${camera.type})`);\n }\n }\n\n GLTFLoader.AddPointerMetadata(babylonCamera, context);\n this._parent.onCameraLoadedObservable.notifyObservers(babylonCamera);\n assign(babylonCamera);\n\n this.logClose();\n\n return Promise.all(promises).then(() => {\n return babylonCamera;\n });\n }\n\n private _loadAnimationsAsync(): Promise {\n const animations = this._gltf.animations;\n if (!animations) {\n return Promise.resolve();\n }\n\n const promises = new Array>();\n\n for (let index = 0; index < animations.length; index++) {\n const animation = animations[index];\n promises.push(this.loadAnimationAsync(`/animations/${animation.index}`, animation));\n }\n\n return Promise.all(promises).then(() => { });\n }\n\n /**\n * Loads a glTF animation.\n * @param context The context when loading the asset\n * @param animation The glTF animation property\n * @returns A promise that resolves with the loaded Babylon animation group when the load is complete\n */\n public loadAnimationAsync(context: string, animation: IAnimation): Promise {\n const promise = this._extensionsLoadAnimationAsync(context, animation);\n if (promise) {\n return promise;\n }\n\n this._babylonScene._blockEntityCollection = this._forAssetContainer;\n const babylonAnimationGroup = new AnimationGroup(animation.name || `animation${animation.index}`, this._babylonScene);\n this._babylonScene._blockEntityCollection = false;\n animation._babylonAnimationGroup = babylonAnimationGroup;\n\n const promises = new Array>();\n\n ArrayItem.Assign(animation.channels);\n ArrayItem.Assign(animation.samplers);\n\n for (const channel of animation.channels) {\n promises.push(this._loadAnimationChannelAsync(`${context}/channels/${channel.index}`, context, animation, channel, babylonAnimationGroup));\n }\n\n return Promise.all(promises).then(() => {\n babylonAnimationGroup.normalize(0);\n return babylonAnimationGroup;\n });\n }\n\n /**\n * @hidden Loads a glTF animation channel.\n * @param context The context when loading the asset\n * @param animationContext The context of the animation when loading the asset\n * @param animation The glTF animation property\n * @param channel The glTF animation channel property\n * @param babylonAnimationGroup The babylon animation group property\n * @param animationTargetOverride The babylon animation channel target override property. My be null.\n * @returns A void promise when the channel load is complete\n */\n public _loadAnimationChannelAsync(context: string, animationContext: string, animation: IAnimation, channel: IAnimationChannel, babylonAnimationGroup: AnimationGroup, animationTargetOverride: Nullable = null): Promise {\n if (channel.target.node == undefined) {\n return Promise.resolve();\n }\n\n const targetNode = ArrayItem.Get(`${context}/target/node`, this._gltf.nodes, channel.target.node);\n\n // Ignore animations that have no animation targets.\n if ((channel.target.path === AnimationChannelTargetPath.WEIGHTS && !targetNode._numMorphTargets) ||\n (channel.target.path !== AnimationChannelTargetPath.WEIGHTS && !targetNode._babylonTransformNode)) {\n return Promise.resolve();\n }\n\n const sampler = ArrayItem.Get(`${context}/sampler`, animation.samplers, channel.sampler);\n return this._loadAnimationSamplerAsync(`${animationContext}/samplers/${channel.sampler}`, sampler).then((data) => {\n let targetPath: string;\n let animationType: number;\n switch (channel.target.path) {\n case AnimationChannelTargetPath.TRANSLATION: {\n targetPath = \"position\";\n animationType = Animation.ANIMATIONTYPE_VECTOR3;\n break;\n }\n case AnimationChannelTargetPath.ROTATION: {\n targetPath = \"rotationQuaternion\";\n animationType = Animation.ANIMATIONTYPE_QUATERNION;\n break;\n }\n case AnimationChannelTargetPath.SCALE: {\n targetPath = \"scaling\";\n animationType = Animation.ANIMATIONTYPE_VECTOR3;\n break;\n }\n case AnimationChannelTargetPath.WEIGHTS: {\n targetPath = \"influence\";\n animationType = Animation.ANIMATIONTYPE_FLOAT;\n break;\n }\n default: {\n throw new Error(`${context}/target/path: Invalid value (${channel.target.path})`);\n }\n }\n\n let outputBufferOffset = 0;\n let getNextOutputValue: () => Vector3 | Quaternion | Array;\n switch (targetPath) {\n case \"position\": {\n getNextOutputValue = () => {\n const value = Vector3.FromArray(data.output, outputBufferOffset);\n outputBufferOffset += 3;\n return value;\n };\n break;\n }\n case \"rotationQuaternion\": {\n getNextOutputValue = () => {\n const value = Quaternion.FromArray(data.output, outputBufferOffset);\n outputBufferOffset += 4;\n return value;\n };\n break;\n }\n case \"scaling\": {\n getNextOutputValue = () => {\n const value = Vector3.FromArray(data.output, outputBufferOffset);\n outputBufferOffset += 3;\n return value;\n };\n break;\n }\n case \"influence\": {\n getNextOutputValue = () => {\n const value = new Array(targetNode._numMorphTargets!);\n for (let i = 0; i < targetNode._numMorphTargets!; i++) {\n value[i] = data.output[outputBufferOffset++];\n }\n return value;\n };\n break;\n }\n }\n\n let getNextKey: (frameIndex: number) => IAnimationKey;\n switch (data.interpolation) {\n case AnimationSamplerInterpolation.STEP: {\n getNextKey = (frameIndex) => ({\n frame: data.input[frameIndex],\n value: getNextOutputValue(),\n interpolation: AnimationKeyInterpolation.STEP\n });\n break;\n }\n case AnimationSamplerInterpolation.LINEAR: {\n getNextKey = (frameIndex) => ({\n frame: data.input[frameIndex],\n value: getNextOutputValue()\n });\n break;\n }\n case AnimationSamplerInterpolation.CUBICSPLINE: {\n getNextKey = (frameIndex) => ({\n frame: data.input[frameIndex],\n inTangent: getNextOutputValue(),\n value: getNextOutputValue(),\n outTangent: getNextOutputValue()\n });\n break;\n }\n }\n\n const keys = new Array(data.input.length);\n for (let frameIndex = 0; frameIndex < data.input.length; frameIndex++) {\n keys[frameIndex] = getNextKey!(frameIndex);\n }\n\n if (targetPath === \"influence\") {\n for (let targetIndex = 0; targetIndex < targetNode._numMorphTargets!; targetIndex++) {\n const animationName = `${babylonAnimationGroup.name}_channel${babylonAnimationGroup.targetedAnimations.length}`;\n const babylonAnimation = new Animation(animationName, targetPath, 1, animationType);\n babylonAnimation.setKeys(keys.map((key) => ({\n frame: key.frame,\n inTangent: key.inTangent ? key.inTangent[targetIndex] : undefined,\n value: key.value[targetIndex],\n outTangent: key.outTangent ? key.outTangent[targetIndex] : undefined\n })));\n\n this._forEachPrimitive(targetNode, (babylonAbstractMesh: AbstractMesh) => {\n const babylonMesh = babylonAbstractMesh as Mesh;\n const morphTarget = babylonMesh.morphTargetManager!.getTarget(targetIndex);\n const babylonAnimationClone = babylonAnimation.clone();\n morphTarget.animations.push(babylonAnimationClone);\n babylonAnimationGroup.addTargetedAnimation(babylonAnimationClone, morphTarget);\n });\n }\n }\n else {\n const animationName = `${babylonAnimationGroup.name}_channel${babylonAnimationGroup.targetedAnimations.length}`;\n const babylonAnimation = new Animation(animationName, targetPath, 1, animationType);\n babylonAnimation.setKeys(keys);\n\n if (animationTargetOverride != null && animationTargetOverride.animations != null) {\n animationTargetOverride.animations.push(babylonAnimation);\n babylonAnimationGroup.addTargetedAnimation(babylonAnimation, animationTargetOverride);\n } else {\n targetNode._babylonTransformNode!.animations.push(babylonAnimation);\n babylonAnimationGroup.addTargetedAnimation(babylonAnimation, targetNode._babylonTransformNode!);\n }\n }\n });\n }\n\n private _loadAnimationSamplerAsync(context: string, sampler: IAnimationSampler): Promise<_IAnimationSamplerData> {\n if (sampler._data) {\n return sampler._data;\n }\n\n const interpolation = sampler.interpolation || AnimationSamplerInterpolation.LINEAR;\n switch (interpolation) {\n case AnimationSamplerInterpolation.STEP:\n case AnimationSamplerInterpolation.LINEAR:\n case AnimationSamplerInterpolation.CUBICSPLINE: {\n break;\n }\n default: {\n throw new Error(`${context}/interpolation: Invalid value (${sampler.interpolation})`);\n }\n }\n\n const inputAccessor = ArrayItem.Get(`${context}/input`, this._gltf.accessors, sampler.input);\n const outputAccessor = ArrayItem.Get(`${context}/output`, this._gltf.accessors, sampler.output);\n sampler._data = Promise.all([\n this._loadFloatAccessorAsync(`/accessors/${inputAccessor.index}`, inputAccessor),\n this._loadFloatAccessorAsync(`/accessors/${outputAccessor.index}`, outputAccessor)\n ]).then(([inputData, outputData]) => {\n return {\n input: inputData,\n interpolation: interpolation,\n output: outputData,\n };\n });\n\n return sampler._data;\n }\n\n private _loadBufferAsync(context: string, buffer: IBuffer, byteOffset: number, byteLength: number): Promise {\n const extensionPromise = this._extensionsLoadBufferAsync(context, buffer, byteOffset, byteLength);\n if (extensionPromise) {\n return extensionPromise;\n }\n\n if (!buffer._data) {\n if (buffer.uri) {\n buffer._data = this.loadUriAsync(`${context}/uri`, buffer, buffer.uri);\n }\n else {\n if (!this._bin) {\n throw new Error(`${context}: Uri is missing or the binary glTF is missing its binary chunk`);\n }\n\n buffer._data = this._bin.readAsync(0, buffer.byteLength);\n }\n }\n\n return buffer._data.then((data) => {\n try {\n return new Uint8Array(data.buffer, data.byteOffset + byteOffset, byteLength);\n }\n catch (e) {\n throw new Error(`${context}: ${e.message}`);\n }\n });\n }\n\n /**\n * Loads a glTF buffer view.\n * @param context The context when loading the asset\n * @param bufferView The glTF buffer view property\n * @returns A promise that resolves with the loaded data when the load is complete\n */\n public loadBufferViewAsync(context: string, bufferView: IBufferView): Promise {\n const extensionPromise = this._extensionsLoadBufferViewAsync(context, bufferView);\n if (extensionPromise) {\n return extensionPromise;\n }\n\n if (bufferView._data) {\n return bufferView._data;\n }\n\n const buffer = ArrayItem.Get(`${context}/buffer`, this._gltf.buffers, bufferView.buffer);\n bufferView._data = this._loadBufferAsync(`/buffers/${buffer.index}`, buffer, (bufferView.byteOffset || 0), bufferView.byteLength);\n\n return bufferView._data;\n }\n\n private _loadAccessorAsync(context: string, accessor: IAccessor, constructor: TypedArrayConstructor): Promise {\n if (accessor._data) {\n return accessor._data;\n }\n\n const numComponents = GLTFLoader._GetNumComponents(context, accessor.type);\n const byteStride = numComponents * VertexBuffer.GetTypeByteLength(accessor.componentType);\n const length = numComponents * accessor.count;\n\n if (accessor.bufferView == undefined) {\n accessor._data = Promise.resolve(new constructor(length));\n }\n else {\n const bufferView = ArrayItem.Get(`${context}/bufferView`, this._gltf.bufferViews, accessor.bufferView);\n accessor._data = this.loadBufferViewAsync(`/bufferViews/${bufferView.index}`, bufferView).then((data) => {\n if (accessor.componentType === AccessorComponentType.FLOAT && !accessor.normalized && (!bufferView.byteStride || bufferView.byteStride === byteStride)) {\n return GLTFLoader._GetTypedArray(context, accessor.componentType, data, accessor.byteOffset, length);\n }\n else {\n const typedArray = new constructor(length);\n VertexBuffer.ForEach(data, accessor.byteOffset || 0, bufferView.byteStride || byteStride, numComponents, accessor.componentType, typedArray.length, accessor.normalized || false, (value, index) => {\n typedArray[index] = value;\n });\n return typedArray;\n }\n });\n }\n\n if (accessor.sparse) {\n const sparse = accessor.sparse;\n accessor._data = accessor._data.then((data) => {\n const typedArray = data as TypedArrayLike;\n const indicesBufferView = ArrayItem.Get(`${context}/sparse/indices/bufferView`, this._gltf.bufferViews, sparse.indices.bufferView);\n const valuesBufferView = ArrayItem.Get(`${context}/sparse/values/bufferView`, this._gltf.bufferViews, sparse.values.bufferView);\n return Promise.all([\n this.loadBufferViewAsync(`/bufferViews/${indicesBufferView.index}`, indicesBufferView),\n this.loadBufferViewAsync(`/bufferViews/${valuesBufferView.index}`, valuesBufferView)\n ]).then(([indicesData, valuesData]) => {\n const indices = GLTFLoader._GetTypedArray(`${context}/sparse/indices`, sparse.indices.componentType, indicesData, sparse.indices.byteOffset, sparse.count) as IndicesArray;\n\n const sparseLength = numComponents * sparse.count;\n let values: TypedArrayLike;\n\n if (accessor.componentType === AccessorComponentType.FLOAT && !accessor.normalized) {\n values = GLTFLoader._GetTypedArray(`${context}/sparse/values`, accessor.componentType, valuesData, sparse.values.byteOffset, sparseLength);\n }\n else {\n const sparseData = GLTFLoader._GetTypedArray(`${context}/sparse/values`, accessor.componentType, valuesData, sparse.values.byteOffset, sparseLength);\n values = new constructor(sparseLength);\n VertexBuffer.ForEach(sparseData, 0, byteStride, numComponents, accessor.componentType, values.length, accessor.normalized || false, (value, index) => {\n values[index] = value;\n });\n }\n\n let valuesIndex = 0;\n for (let indicesIndex = 0; indicesIndex < indices.length; indicesIndex++) {\n let dataIndex = indices[indicesIndex] * numComponents;\n for (let componentIndex = 0; componentIndex < numComponents; componentIndex++) {\n typedArray[dataIndex++] = values[valuesIndex++];\n }\n }\n\n return typedArray;\n });\n });\n }\n\n return accessor._data;\n }\n\n /** @hidden */\n public _loadFloatAccessorAsync(context: string, accessor: IAccessor): Promise {\n return this._loadAccessorAsync(context, accessor, Float32Array) as Promise;\n }\n\n private _loadIndicesAccessorAsync(context: string, accessor: IAccessor): Promise {\n if (accessor.type !== AccessorType.SCALAR) {\n throw new Error(`${context}/type: Invalid value ${accessor.type}`);\n }\n\n if (accessor.componentType !== AccessorComponentType.UNSIGNED_BYTE &&\n accessor.componentType !== AccessorComponentType.UNSIGNED_SHORT &&\n accessor.componentType !== AccessorComponentType.UNSIGNED_INT) {\n throw new Error(`${context}/componentType: Invalid value ${accessor.componentType}`);\n }\n\n if (accessor._data) {\n return accessor._data as Promise;\n }\n\n if (accessor.sparse) {\n const constructor = GLTFLoader._GetTypedArrayConstructor(`${context}/componentType`, accessor.componentType);\n accessor._data = this._loadAccessorAsync(context, accessor, constructor);\n }\n else {\n const bufferView = ArrayItem.Get(`${context}/bufferView`, this._gltf.bufferViews, accessor.bufferView);\n accessor._data = this.loadBufferViewAsync(`/bufferViews/${bufferView.index}`, bufferView).then((data) => {\n return GLTFLoader._GetTypedArray(context, accessor.componentType, data, accessor.byteOffset, accessor.count);\n });\n }\n\n return accessor._data as Promise;\n }\n\n private _loadVertexBufferViewAsync(bufferView: IBufferView, kind: string): Promise {\n if (bufferView._babylonBuffer) {\n return bufferView._babylonBuffer;\n }\n\n bufferView._babylonBuffer = this.loadBufferViewAsync(`/bufferViews/${bufferView.index}`, bufferView).then((data) => {\n return new Buffer(this._babylonScene.getEngine(), data, false);\n });\n\n return bufferView._babylonBuffer;\n }\n\n private _loadVertexAccessorAsync(context: string, accessor: IAccessor, kind: string): Promise {\n if (accessor._babylonVertexBuffer) {\n return accessor._babylonVertexBuffer;\n }\n\n if (accessor.sparse) {\n accessor._babylonVertexBuffer = this._loadFloatAccessorAsync(`/accessors/${accessor.index}`, accessor).then((data) => {\n return new VertexBuffer(this._babylonScene.getEngine(), data, kind, false);\n });\n }\n // HACK: If byte offset is not a multiple of component type byte length then load as a float array instead of using Babylon buffers.\n else if (accessor.byteOffset && accessor.byteOffset % VertexBuffer.GetTypeByteLength(accessor.componentType) !== 0) {\n Logger.Warn(\"Accessor byte offset is not a multiple of component type byte length\");\n accessor._babylonVertexBuffer = this._loadFloatAccessorAsync(`/accessors/${accessor.index}`, accessor).then((data) => {\n return new VertexBuffer(this._babylonScene.getEngine(), data, kind, false);\n });\n }\n // Load joint indices as a float array since the shaders expect float data but glTF uses unsigned byte/short.\n // This prevents certain platforms (e.g. D3D) from having to convert the data to float on the fly.\n else if (kind === VertexBuffer.MatricesIndicesKind || kind === VertexBuffer.MatricesIndicesExtraKind) {\n accessor._babylonVertexBuffer = this._loadFloatAccessorAsync(`/accessors/${accessor.index}`, accessor).then((data) => {\n return new VertexBuffer(this._babylonScene.getEngine(), data, kind, false);\n });\n }\n else {\n const bufferView = ArrayItem.Get(`${context}/bufferView`, this._gltf.bufferViews, accessor.bufferView);\n accessor._babylonVertexBuffer = this._loadVertexBufferViewAsync(bufferView, kind).then((babylonBuffer) => {\n const size = GLTFLoader._GetNumComponents(context, accessor.type);\n return new VertexBuffer(this._babylonScene.getEngine(), babylonBuffer, kind, false, false, bufferView.byteStride,\n false, accessor.byteOffset, size, accessor.componentType, accessor.normalized, true);\n });\n }\n\n return accessor._babylonVertexBuffer;\n }\n\n private _loadMaterialMetallicRoughnessPropertiesAsync(context: string, properties: IMaterialPbrMetallicRoughness, babylonMaterial: Material): Promise {\n if (!(babylonMaterial instanceof PBRMaterial)) {\n throw new Error(`${context}: Material type not supported`);\n }\n\n const promises = new Array>();\n\n if (properties) {\n if (properties.baseColorFactor) {\n babylonMaterial.albedoColor = Color3.FromArray(properties.baseColorFactor);\n babylonMaterial.alpha = properties.baseColorFactor[3];\n }\n else {\n babylonMaterial.albedoColor = Color3.White();\n }\n\n babylonMaterial.metallic = properties.metallicFactor == undefined ? 1 : properties.metallicFactor;\n babylonMaterial.roughness = properties.roughnessFactor == undefined ? 1 : properties.roughnessFactor;\n\n if (properties.baseColorTexture) {\n promises.push(this.loadTextureInfoAsync(`${context}/baseColorTexture`, properties.baseColorTexture, (texture) => {\n texture.name = `${babylonMaterial.name} (Base Color)`;\n babylonMaterial.albedoTexture = texture;\n }));\n }\n\n if (properties.metallicRoughnessTexture) {\n promises.push(this.loadTextureInfoAsync(`${context}/metallicRoughnessTexture`, properties.metallicRoughnessTexture, (texture) => {\n texture.name = `${babylonMaterial.name} (Metallic Roughness)`;\n babylonMaterial.metallicTexture = texture;\n }));\n\n babylonMaterial.useMetallnessFromMetallicTextureBlue = true;\n babylonMaterial.useRoughnessFromMetallicTextureGreen = true;\n babylonMaterial.useRoughnessFromMetallicTextureAlpha = false;\n }\n }\n\n return Promise.all(promises).then(() => { });\n }\n\n /** @hidden */\n public _loadMaterialAsync(context: string, material: IMaterial, babylonMesh: Nullable, babylonDrawMode: number, assign: (babylonMaterial: Material) => void = () => { }): Promise {\n const extensionPromise = this._extensionsLoadMaterialAsync(context, material, babylonMesh, babylonDrawMode, assign);\n if (extensionPromise) {\n return extensionPromise;\n }\n\n material._data = material._data || {};\n let babylonData = material._data[babylonDrawMode];\n if (!babylonData) {\n this.logOpen(`${context} ${material.name || \"\"}`);\n\n const babylonMaterial = this.createMaterial(context, material, babylonDrawMode);\n\n babylonData = {\n babylonMaterial: babylonMaterial,\n babylonMeshes: [],\n promise: this.loadMaterialPropertiesAsync(context, material, babylonMaterial)\n };\n\n material._data[babylonDrawMode] = babylonData;\n\n GLTFLoader.AddPointerMetadata(babylonMaterial, context);\n this._parent.onMaterialLoadedObservable.notifyObservers(babylonMaterial);\n\n this.logClose();\n }\n\n if (babylonMesh) {\n babylonData.babylonMeshes.push(babylonMesh);\n\n babylonMesh.onDisposeObservable.addOnce(() => {\n const index = babylonData.babylonMeshes.indexOf(babylonMesh);\n if (index !== -1) {\n babylonData.babylonMeshes.splice(index, 1);\n }\n });\n }\n\n assign(babylonData.babylonMaterial);\n\n return babylonData.promise.then(() => {\n return babylonData.babylonMaterial;\n });\n }\n\n private _createDefaultMaterial(name: string, babylonDrawMode: number): Material {\n this._babylonScene._blockEntityCollection = this._forAssetContainer;\n const babylonMaterial = new PBRMaterial(name, this._babylonScene);\n this._babylonScene._blockEntityCollection = false;\n // Moved to mesh so user can change materials on gltf meshes: babylonMaterial.sideOrientation = this._babylonScene.useRightHandedSystem ? Material.CounterClockWiseSideOrientation : Material.ClockWiseSideOrientation;\n babylonMaterial.fillMode = babylonDrawMode;\n babylonMaterial.enableSpecularAntiAliasing = true;\n babylonMaterial.useRadianceOverAlpha = !this._parent.transparencyAsCoverage;\n babylonMaterial.useSpecularOverAlpha = !this._parent.transparencyAsCoverage;\n babylonMaterial.transparencyMode = PBRMaterial.PBRMATERIAL_OPAQUE;\n babylonMaterial.metallic = 1;\n babylonMaterial.roughness = 1;\n return babylonMaterial;\n }\n\n /**\n * Creates a Babylon material from a glTF material.\n * @param context The context when loading the asset\n * @param material The glTF material property\n * @param babylonDrawMode The draw mode for the Babylon material\n * @returns The Babylon material\n */\n public createMaterial(context: string, material: IMaterial, babylonDrawMode: number): Material {\n const extensionPromise = this._extensionsCreateMaterial(context, material, babylonDrawMode);\n if (extensionPromise) {\n return extensionPromise;\n }\n\n const name = material.name || `material${material.index}`;\n const babylonMaterial = this._createDefaultMaterial(name, babylonDrawMode);\n\n return babylonMaterial;\n }\n\n /**\n * Loads properties from a glTF material into a Babylon material.\n * @param context The context when loading the asset\n * @param material The glTF material property\n * @param babylonMaterial The Babylon material\n * @returns A promise that resolves when the load is complete\n */\n public loadMaterialPropertiesAsync(context: string, material: IMaterial, babylonMaterial: Material): Promise {\n const extensionPromise = this._extensionsLoadMaterialPropertiesAsync(context, material, babylonMaterial);\n if (extensionPromise) {\n return extensionPromise;\n }\n\n const promises = new Array>();\n\n promises.push(this.loadMaterialBasePropertiesAsync(context, material, babylonMaterial));\n\n if (material.pbrMetallicRoughness) {\n promises.push(this._loadMaterialMetallicRoughnessPropertiesAsync(`${context}/pbrMetallicRoughness`, material.pbrMetallicRoughness, babylonMaterial));\n }\n\n this.loadMaterialAlphaProperties(context, material, babylonMaterial);\n\n return Promise.all(promises).then(() => { });\n }\n\n /**\n * Loads the normal, occlusion, and emissive properties from a glTF material into a Babylon material.\n * @param context The context when loading the asset\n * @param material The glTF material property\n * @param babylonMaterial The Babylon material\n * @returns A promise that resolves when the load is complete\n */\n public loadMaterialBasePropertiesAsync(context: string, material: IMaterial, babylonMaterial: Material): Promise {\n if (!(babylonMaterial instanceof PBRMaterial)) {\n throw new Error(`${context}: Material type not supported`);\n }\n\n const promises = new Array>();\n\n babylonMaterial.emissiveColor = material.emissiveFactor ? Color3.FromArray(material.emissiveFactor) : new Color3(0, 0, 0);\n if (material.doubleSided) {\n babylonMaterial.backFaceCulling = false;\n babylonMaterial.twoSidedLighting = true;\n }\n\n if (material.normalTexture) {\n promises.push(this.loadTextureInfoAsync(`${context}/normalTexture`, material.normalTexture, (texture) => {\n texture.name = `${babylonMaterial.name} (Normal)`;\n babylonMaterial.bumpTexture = texture;\n }));\n\n babylonMaterial.invertNormalMapX = !this._babylonScene.useRightHandedSystem;\n babylonMaterial.invertNormalMapY = this._babylonScene.useRightHandedSystem;\n if (material.normalTexture.scale != undefined) {\n babylonMaterial.bumpTexture.level = material.normalTexture.scale;\n }\n\n babylonMaterial.forceIrradianceInFragment = true;\n }\n\n if (material.occlusionTexture) {\n promises.push(this.loadTextureInfoAsync(`${context}/occlusionTexture`, material.occlusionTexture, (texture) => {\n texture.name = `${babylonMaterial.name} (Occlusion)`;\n babylonMaterial.ambientTexture = texture;\n }));\n\n babylonMaterial.useAmbientInGrayScale = true;\n if (material.occlusionTexture.strength != undefined) {\n babylonMaterial.ambientTextureStrength = material.occlusionTexture.strength;\n }\n }\n\n if (material.emissiveTexture) {\n promises.push(this.loadTextureInfoAsync(`${context}/emissiveTexture`, material.emissiveTexture, (texture) => {\n texture.name = `${babylonMaterial.name} (Emissive)`;\n babylonMaterial.emissiveTexture = texture;\n }));\n }\n\n return Promise.all(promises).then(() => { });\n }\n\n /**\n * Loads the alpha properties from a glTF material into a Babylon material.\n * Must be called after the setting the albedo texture of the Babylon material when the material has an albedo texture.\n * @param context The context when loading the asset\n * @param material The glTF material property\n * @param babylonMaterial The Babylon material\n */\n public loadMaterialAlphaProperties(context: string, material: IMaterial, babylonMaterial: Material): void {\n if (!(babylonMaterial instanceof PBRMaterial)) {\n throw new Error(`${context}: Material type not supported`);\n }\n\n const alphaMode = material.alphaMode || MaterialAlphaMode.OPAQUE;\n switch (alphaMode) {\n case MaterialAlphaMode.OPAQUE: {\n babylonMaterial.transparencyMode = PBRMaterial.PBRMATERIAL_OPAQUE;\n break;\n }\n case MaterialAlphaMode.MASK: {\n babylonMaterial.transparencyMode = PBRMaterial.PBRMATERIAL_ALPHATEST;\n babylonMaterial.alphaCutOff = (material.alphaCutoff == undefined ? 0.5 : material.alphaCutoff);\n if (babylonMaterial.albedoTexture) {\n babylonMaterial.albedoTexture.hasAlpha = true;\n }\n break;\n }\n case MaterialAlphaMode.BLEND: {\n babylonMaterial.transparencyMode = PBRMaterial.PBRMATERIAL_ALPHABLEND;\n if (babylonMaterial.albedoTexture) {\n babylonMaterial.albedoTexture.hasAlpha = true;\n babylonMaterial.useAlphaFromAlbedoTexture = true;\n }\n break;\n }\n default: {\n throw new Error(`${context}/alphaMode: Invalid value (${material.alphaMode})`);\n }\n }\n }\n\n /**\n * Loads a glTF texture info.\n * @param context The context when loading the asset\n * @param textureInfo The glTF texture info property\n * @param assign A function called synchronously after parsing the glTF properties\n * @returns A promise that resolves with the loaded Babylon texture when the load is complete\n */\n public loadTextureInfoAsync(context: string, textureInfo: ITextureInfo, assign: (babylonTexture: BaseTexture) => void = () => { }): Promise {\n const extensionPromise = this._extensionsLoadTextureInfoAsync(context, textureInfo, assign);\n if (extensionPromise) {\n return extensionPromise;\n }\n\n this.logOpen(`${context}`);\n\n if (textureInfo.texCoord! >= 2) {\n throw new Error(`${context}/texCoord: Invalid value (${textureInfo.texCoord})`);\n }\n\n const texture = ArrayItem.Get(`${context}/index`, this._gltf.textures, textureInfo.index);\n const promise = this._loadTextureAsync(`/textures/${textureInfo.index}`, texture, (babylonTexture) => {\n babylonTexture.coordinatesIndex = textureInfo.texCoord || 0;\n GLTFLoader.AddPointerMetadata(babylonTexture, context);\n this._parent.onTextureLoadedObservable.notifyObservers(babylonTexture);\n assign(babylonTexture);\n });\n\n this.logClose();\n\n return promise;\n }\n\n /** @hidden */\n public _loadTextureAsync(context: string, texture: ITexture, assign: (babylonTexture: BaseTexture) => void = () => { }): Promise {\n const extensionPromise = this._extensionsLoadTextureAsync(context, texture, assign);\n if (extensionPromise) {\n return extensionPromise;\n }\n\n this.logOpen(`${context} ${texture.name || \"\"}`);\n\n const sampler = (texture.sampler == undefined ? GLTFLoader.DefaultSampler : ArrayItem.Get(`${context}/sampler`, this._gltf.samplers, texture.sampler));\n const image = ArrayItem.Get(`${context}/source`, this._gltf.images, texture.source);\n const promise = this._createTextureAsync(context, sampler, image, assign);\n\n this.logClose();\n\n return promise;\n }\n\n /** @hidden */\n public _createTextureAsync(context: string, sampler: ISampler, image: IImage, assign: (babylonTexture: BaseTexture) => void = () => { }): Promise {\n const samplerData = this._loadSampler(`/samplers/${sampler.index}`, sampler);\n\n const promises = new Array>();\n\n const deferred = new Deferred();\n this._babylonScene._blockEntityCollection = this._forAssetContainer;\n const babylonTexture = new Texture(null, this._babylonScene, samplerData.noMipMaps, false, samplerData.samplingMode, () => {\n if (!this._disposed) {\n deferred.resolve();\n }\n }, (message, exception) => {\n if (!this._disposed) {\n deferred.reject(new Error(`${context}: ${(exception && exception.message) ? exception.message : message || \"Failed to load texture\"}`));\n }\n }, undefined, undefined, undefined, image.mimeType);\n this._babylonScene._blockEntityCollection = false;\n promises.push(deferred.promise);\n\n promises.push(this.loadImageAsync(`/images/${image.index}`, image).then((data) => {\n const name = image.uri || `${this._fileName}#image${image.index}`;\n const dataUrl = `data:${this._uniqueRootUrl}${name}`;\n babylonTexture.updateURL(dataUrl, data);\n }));\n\n babylonTexture.wrapU = samplerData.wrapU;\n babylonTexture.wrapV = samplerData.wrapV;\n assign(babylonTexture);\n\n return Promise.all(promises).then(() => {\n return babylonTexture;\n });\n }\n\n private _loadSampler(context: string, sampler: ISampler): _ISamplerData {\n if (!sampler._data) {\n sampler._data = {\n noMipMaps: (sampler.minFilter === TextureMinFilter.NEAREST || sampler.minFilter === TextureMinFilter.LINEAR),\n samplingMode: GLTFLoader._GetTextureSamplingMode(context, sampler),\n wrapU: GLTFLoader._GetTextureWrapMode(`${context}/wrapS`, sampler.wrapS),\n wrapV: GLTFLoader._GetTextureWrapMode(`${context}/wrapT`, sampler.wrapT)\n };\n }\n\n return sampler._data;\n }\n\n /**\n * Loads a glTF image.\n * @param context The context when loading the asset\n * @param image The glTF image property\n * @returns A promise that resolves with the loaded data when the load is complete\n */\n public loadImageAsync(context: string, image: IImage): Promise {\n if (!image._data) {\n this.logOpen(`${context} ${image.name || \"\"}`);\n\n if (image.uri) {\n image._data = this.loadUriAsync(`${context}/uri`, image, image.uri);\n }\n else {\n const bufferView = ArrayItem.Get(`${context}/bufferView`, this._gltf.bufferViews, image.bufferView);\n image._data = this.loadBufferViewAsync(`/bufferViews/${bufferView.index}`, bufferView);\n }\n\n this.logClose();\n }\n\n return image._data;\n }\n\n /**\n * Loads a glTF uri.\n * @param context The context when loading the asset\n * @param property The glTF property associated with the uri\n * @param uri The base64 or relative uri\n * @returns A promise that resolves with the loaded data when the load is complete\n */\n public loadUriAsync(context: string, property: IProperty, uri: string): Promise {\n const extensionPromise = this._extensionsLoadUriAsync(context, property, uri);\n if (extensionPromise) {\n return extensionPromise;\n }\n\n if (!GLTFLoader._ValidateUri(uri)) {\n throw new Error(`${context}: '${uri}' is invalid`);\n }\n\n if (Tools.IsBase64(uri)) {\n const data = new Uint8Array(Tools.DecodeBase64(uri));\n this.log(`Decoded ${uri.substr(0, 64)}... (${data.length} bytes)`);\n return Promise.resolve(data);\n }\n\n this.log(`Loading ${uri}`);\n\n return this._parent.preprocessUrlAsync(this._rootUrl + uri).then((url) => {\n return new Promise((resolve, reject) => {\n this._parent._loadFile(url, this._babylonScene, (data) => {\n if (!this._disposed) {\n this.log(`Loaded ${uri} (${(data as ArrayBuffer).byteLength} bytes)`);\n resolve(new Uint8Array(data as ArrayBuffer));\n }\n }, true, (request) => {\n reject(new LoadFileError(`${context}: Failed to load '${uri}'${request ? \": \" + request.status + \" \" + request.statusText : \"\"}`, request));\n });\n });\n });\n }\n\n /**\n * Adds a JSON pointer to the metadata of the Babylon object at `.metadata.gltf.pointers`.\n * @param babylonObject the Babylon object with metadata\n * @param pointer the JSON pointer\n */\n public static AddPointerMetadata(babylonObject: { metadata: any }, pointer: string): void {\n const metadata = (babylonObject.metadata = babylonObject.metadata || {});\n const gltf = (metadata.gltf = metadata.gltf || {});\n const pointers = (gltf.pointers = gltf.pointers || []);\n pointers.push(pointer);\n }\n\n private static _GetTextureWrapMode(context: string, mode: TextureWrapMode | undefined): number {\n // Set defaults if undefined\n mode = mode == undefined ? TextureWrapMode.REPEAT : mode;\n\n switch (mode) {\n case TextureWrapMode.CLAMP_TO_EDGE: return Texture.CLAMP_ADDRESSMODE;\n case TextureWrapMode.MIRRORED_REPEAT: return Texture.MIRROR_ADDRESSMODE;\n case TextureWrapMode.REPEAT: return Texture.WRAP_ADDRESSMODE;\n default:\n Logger.Warn(`${context}: Invalid value (${mode})`);\n return Texture.WRAP_ADDRESSMODE;\n }\n }\n\n private static _GetTextureSamplingMode(context: string, sampler: ISampler): number {\n // Set defaults if undefined\n const magFilter = sampler.magFilter == undefined ? TextureMagFilter.LINEAR : sampler.magFilter;\n const minFilter = sampler.minFilter == undefined ? TextureMinFilter.LINEAR_MIPMAP_LINEAR : sampler.minFilter;\n\n if (magFilter === TextureMagFilter.LINEAR) {\n switch (minFilter) {\n case TextureMinFilter.NEAREST: return Texture.LINEAR_NEAREST;\n case TextureMinFilter.LINEAR: return Texture.LINEAR_LINEAR;\n case TextureMinFilter.NEAREST_MIPMAP_NEAREST: return Texture.LINEAR_NEAREST_MIPNEAREST;\n case TextureMinFilter.LINEAR_MIPMAP_NEAREST: return Texture.LINEAR_LINEAR_MIPNEAREST;\n case TextureMinFilter.NEAREST_MIPMAP_LINEAR: return Texture.LINEAR_NEAREST_MIPLINEAR;\n case TextureMinFilter.LINEAR_MIPMAP_LINEAR: return Texture.LINEAR_LINEAR_MIPLINEAR;\n default:\n Logger.Warn(`${context}/minFilter: Invalid value (${minFilter})`);\n return Texture.LINEAR_LINEAR_MIPLINEAR;\n }\n }\n else {\n if (magFilter !== TextureMagFilter.NEAREST) {\n Logger.Warn(`${context}/magFilter: Invalid value (${magFilter})`);\n }\n\n switch (minFilter) {\n case TextureMinFilter.NEAREST: return Texture.NEAREST_NEAREST;\n case TextureMinFilter.LINEAR: return Texture.NEAREST_LINEAR;\n case TextureMinFilter.NEAREST_MIPMAP_NEAREST: return Texture.NEAREST_NEAREST_MIPNEAREST;\n case TextureMinFilter.LINEAR_MIPMAP_NEAREST: return Texture.NEAREST_LINEAR_MIPNEAREST;\n case TextureMinFilter.NEAREST_MIPMAP_LINEAR: return Texture.NEAREST_NEAREST_MIPLINEAR;\n case TextureMinFilter.LINEAR_MIPMAP_LINEAR: return Texture.NEAREST_LINEAR_MIPLINEAR;\n default:\n Logger.Warn(`${context}/minFilter: Invalid value (${minFilter})`);\n return Texture.NEAREST_NEAREST_MIPNEAREST;\n }\n }\n }\n\n private static _GetTypedArrayConstructor(context: string, componentType: AccessorComponentType): TypedArrayConstructor {\n switch (componentType) {\n case AccessorComponentType.BYTE: return Int8Array;\n case AccessorComponentType.UNSIGNED_BYTE: return Uint8Array;\n case AccessorComponentType.SHORT: return Int16Array;\n case AccessorComponentType.UNSIGNED_SHORT: return Uint16Array;\n case AccessorComponentType.UNSIGNED_INT: return Uint32Array;\n case AccessorComponentType.FLOAT: return Float32Array;\n default: throw new Error(`${context}: Invalid component type ${componentType}`);\n }\n}\n\n private static _GetTypedArray(context: string, componentType: AccessorComponentType, bufferView: ArrayBufferView, byteOffset: number | undefined, length: number): TypedArrayLike {\n const buffer = bufferView.buffer;\n byteOffset = bufferView.byteOffset + (byteOffset || 0);\n\n const constructor = GLTFLoader._GetTypedArrayConstructor(`${context}/componentType`, componentType);\n\n try {\n return new constructor(buffer, byteOffset, length);\n }\n catch (e) {\n throw new Error(`${context}: ${e}`);\n }\n }\n\n private static _GetNumComponents(context: string, type: string): number {\n switch (type) {\n case \"SCALAR\": return 1;\n case \"VEC2\": return 2;\n case \"VEC3\": return 3;\n case \"VEC4\": return 4;\n case \"MAT2\": return 4;\n case \"MAT3\": return 9;\n case \"MAT4\": return 16;\n }\n\n throw new Error(`${context}: Invalid type (${type})`);\n }\n\n private static _ValidateUri(uri: string): boolean {\n return (Tools.IsBase64(uri) || uri.indexOf(\"..\") === -1);\n }\n\n /** @hidden */\n public static _GetDrawMode(context: string, mode: number | undefined): number {\n if (mode == undefined) {\n mode = MeshPrimitiveMode.TRIANGLES;\n }\n\n switch (mode) {\n case MeshPrimitiveMode.POINTS: return Material.PointListDrawMode;\n case MeshPrimitiveMode.LINES: return Material.LineListDrawMode;\n case MeshPrimitiveMode.LINE_LOOP: return Material.LineLoopDrawMode;\n case MeshPrimitiveMode.LINE_STRIP: return Material.LineStripDrawMode;\n case MeshPrimitiveMode.TRIANGLES: return Material.TriangleFillMode;\n case MeshPrimitiveMode.TRIANGLE_STRIP: return Material.TriangleStripDrawMode;\n case MeshPrimitiveMode.TRIANGLE_FAN: return Material.TriangleFanDrawMode;\n }\n\n throw new Error(`${context}: Invalid mesh primitive mode (${mode})`);\n }\n\n private _compileMaterialsAsync(): Promise {\n this._parent._startPerformanceCounter(\"Compile materials\");\n\n const promises = new Array>();\n\n if (this._gltf.materials) {\n for (const material of this._gltf.materials) {\n if (material._data) {\n for (const babylonDrawMode in material._data) {\n const babylonData = material._data[babylonDrawMode];\n for (const babylonMesh of babylonData.babylonMeshes) {\n // Ensure nonUniformScaling is set if necessary.\n babylonMesh.computeWorldMatrix(true);\n\n const babylonMaterial = babylonData.babylonMaterial;\n promises.push(babylonMaterial.forceCompilationAsync(babylonMesh));\n promises.push(babylonMaterial.forceCompilationAsync(babylonMesh, { useInstances: true }));\n if (this._parent.useClipPlane) {\n promises.push(babylonMaterial.forceCompilationAsync(babylonMesh, { clipPlane: true }));\n promises.push(babylonMaterial.forceCompilationAsync(babylonMesh, { clipPlane: true, useInstances: true }));\n }\n }\n }\n }\n }\n }\n\n return Promise.all(promises).then(() => {\n this._parent._endPerformanceCounter(\"Compile materials\");\n });\n }\n\n private _compileShadowGeneratorsAsync(): Promise {\n this._parent._startPerformanceCounter(\"Compile shadow generators\");\n\n const promises = new Array>();\n\n const lights = this._babylonScene.lights;\n for (let light of lights) {\n let generator = light.getShadowGenerator();\n if (generator) {\n promises.push(generator.forceCompilationAsync());\n }\n }\n\n return Promise.all(promises).then(() => {\n this._parent._endPerformanceCounter(\"Compile shadow generators\");\n });\n }\n\n private _forEachExtensions(action: (extension: IGLTFLoaderExtension) => void): void {\n for (const extension of this._extensions) {\n if (extension.enabled) {\n action(extension);\n }\n }\n }\n\n private _applyExtensions(property: IProperty, functionName: string, actionAsync: (extension: IGLTFLoaderExtension) => Nullable | undefined): Nullable {\n for (const extension of this._extensions) {\n if (extension.enabled) {\n const id = `${extension.name}.${functionName}`;\n const loaderProperty = property as ILoaderProperty;\n loaderProperty._activeLoaderExtensionFunctions = loaderProperty._activeLoaderExtensionFunctions || {};\n const activeLoaderExtensionFunctions = loaderProperty._activeLoaderExtensionFunctions;\n if (!activeLoaderExtensionFunctions[id]) {\n activeLoaderExtensionFunctions[id] = true;\n\n try {\n const result = actionAsync(extension);\n if (result) {\n return result;\n }\n }\n finally {\n delete activeLoaderExtensionFunctions[id];\n }\n }\n }\n }\n\n return null;\n }\n\n private _extensionsOnLoading(): void {\n this._forEachExtensions((extension) => extension.onLoading && extension.onLoading());\n }\n\n private _extensionsOnReady(): void {\n this._forEachExtensions((extension) => extension.onReady && extension.onReady());\n }\n\n private _extensionsLoadSceneAsync(context: string, scene: IScene): Nullable> {\n return this._applyExtensions(scene, \"loadScene\", (extension) => extension.loadSceneAsync && extension.loadSceneAsync(context, scene));\n }\n\n private _extensionsLoadNodeAsync(context: string, node: INode, assign: (babylonTransformNode: TransformNode) => void): Nullable> {\n return this._applyExtensions(node, \"loadNode\", (extension) => extension.loadNodeAsync && extension.loadNodeAsync(context, node, assign));\n }\n\n private _extensionsLoadCameraAsync(context: string, camera: ICamera, assign: (babylonCamera: Camera) => void): Nullable> {\n return this._applyExtensions(camera, \"loadCamera\", (extension) => extension.loadCameraAsync && extension.loadCameraAsync(context, camera, assign));\n }\n\n private _extensionsLoadVertexDataAsync(context: string, primitive: IMeshPrimitive, babylonMesh: Mesh): Nullable> {\n return this._applyExtensions(primitive, \"loadVertexData\", (extension) => extension._loadVertexDataAsync && extension._loadVertexDataAsync(context, primitive, babylonMesh));\n }\n\n private _extensionsLoadMeshPrimitiveAsync(context: string, name: string, node: INode, mesh: IMesh, primitive: IMeshPrimitive, assign: (babylonMesh: AbstractMesh) => void): Nullable> {\n return this._applyExtensions(primitive, \"loadMeshPrimitive\", (extension) => extension._loadMeshPrimitiveAsync && extension._loadMeshPrimitiveAsync(context, name, node, mesh, primitive, assign));\n }\n\n private _extensionsLoadMaterialAsync(context: string, material: IMaterial, babylonMesh: Nullable, babylonDrawMode: number, assign: (babylonMaterial: Material) => void): Nullable> {\n return this._applyExtensions(material, \"loadMaterial\", (extension) => extension._loadMaterialAsync && extension._loadMaterialAsync(context, material, babylonMesh, babylonDrawMode, assign));\n }\n\n private _extensionsCreateMaterial(context: string, material: IMaterial, babylonDrawMode: number): Nullable {\n return this._applyExtensions(material, \"createMaterial\", (extension) => extension.createMaterial && extension.createMaterial(context, material, babylonDrawMode));\n }\n\n private _extensionsLoadMaterialPropertiesAsync(context: string, material: IMaterial, babylonMaterial: Material): Nullable> {\n return this._applyExtensions(material, \"loadMaterialProperties\", (extension) => extension.loadMaterialPropertiesAsync && extension.loadMaterialPropertiesAsync(context, material, babylonMaterial));\n }\n\n private _extensionsLoadTextureInfoAsync(context: string, textureInfo: ITextureInfo, assign: (babylonTexture: BaseTexture) => void): Nullable> {\n return this._applyExtensions(textureInfo, \"loadTextureInfo\", (extension) => extension.loadTextureInfoAsync && extension.loadTextureInfoAsync(context, textureInfo, assign));\n }\n\n private _extensionsLoadTextureAsync(context: string, texture: ITexture, assign: (babylonTexture: BaseTexture) => void): Nullable> {\n return this._applyExtensions(texture, \"loadTexture\", (extension) => extension._loadTextureAsync && extension._loadTextureAsync(context, texture, assign));\n }\n\n private _extensionsLoadAnimationAsync(context: string, animation: IAnimation): Nullable> {\n return this._applyExtensions(animation, \"loadAnimation\", (extension) => extension.loadAnimationAsync && extension.loadAnimationAsync(context, animation));\n }\n\n private _extensionsLoadSkinAsync(context: string, node: INode, skin: ISkin): Nullable> {\n return this._applyExtensions(skin, \"loadSkin\", (extension) => extension._loadSkinAsync && extension._loadSkinAsync(context, node, skin));\n }\n\n private _extensionsLoadUriAsync(context: string, property: IProperty, uri: string): Nullable> {\n return this._applyExtensions(property, \"loadUri\", (extension) => extension._loadUriAsync && extension._loadUriAsync(context, property, uri));\n }\n\n private _extensionsLoadBufferViewAsync(context: string, bufferView: IBufferView): Nullable> {\n return this._applyExtensions(bufferView, \"loadBufferView\", (extension) => extension.loadBufferViewAsync && extension.loadBufferViewAsync(context, bufferView));\n }\n\n private _extensionsLoadBufferAsync(context: string, buffer: IBuffer, byteOffset: number, byteLength: number): Nullable> {\n return this._applyExtensions(buffer, \"loadBuffer\", (extension) => extension.loadBufferAsync && extension.loadBufferAsync(context, buffer, byteOffset, byteLength));\n }\n\n /**\n * Helper method called by a loader extension to load an glTF extension.\n * @param context The context when loading the asset\n * @param property The glTF property to load the extension from\n * @param extensionName The name of the extension to load\n * @param actionAsync The action to run\n * @returns The promise returned by actionAsync or null if the extension does not exist\n */\n public static LoadExtensionAsync(context: string, property: IProperty, extensionName: string, actionAsync: (extensionContext: string, extension: TExtension) => Nullable>): Nullable> {\n if (!property.extensions) {\n return null;\n }\n\n const extensions = property.extensions;\n\n const extension = extensions[extensionName] as TExtension;\n if (!extension) {\n return null;\n }\n\n return actionAsync(`${context}/extensions/${extensionName}`, extension);\n }\n\n /**\n * Helper method called by a loader extension to load a glTF extra.\n * @param context The context when loading the asset\n * @param property The glTF property to load the extra from\n * @param extensionName The name of the extension to load\n * @param actionAsync The action to run\n * @returns The promise returned by actionAsync or null if the extra does not exist\n */\n public static LoadExtraAsync(context: string, property: IProperty, extensionName: string, actionAsync: (extraContext: string, extra: TExtra) => Nullable>): Nullable> {\n if (!property.extras) {\n return null;\n }\n\n const extras = property.extras;\n\n const extra = extras[extensionName] as TExtra;\n if (!extra) {\n return null;\n }\n\n return actionAsync(`${context}/extras/${extensionName}`, extra);\n }\n\n /**\n * Checks for presence of an extension.\n * @param name The name of the extension to check\n * @returns A boolean indicating the presence of the given extension name in `extensionsUsed`\n */\n public isExtensionUsed(name: string): boolean {\n return !!this._gltf.extensionsUsed && this._gltf.extensionsUsed.indexOf(name) !== -1;\n }\n\n /**\n * Increments the indentation level and logs a message.\n * @param message The message to log\n */\n public logOpen(message: string): void {\n this._parent._logOpen(message);\n }\n\n /**\n * Decrements the indentation level.\n */\n public logClose(): void {\n this._parent._logClose();\n }\n\n /**\n * Logs a message\n * @param message The message to log\n */\n public log(message: string): void {\n this._parent._log(message);\n }\n\n /**\n * Starts a performance counter.\n * @param counterName The name of the performance counter\n */\n public startPerformanceCounter(counterName: string): void {\n this._parent._startPerformanceCounter(counterName);\n }\n\n /**\n * Ends a performance counter.\n * @param counterName The name of the performance counter\n */\n public endPerformanceCounter(counterName: string): void {\n this._parent._endPerformanceCounter(counterName);\n }\n}\n\nGLTFFileLoader._CreateGLTF2Loader = (parent) => new GLTFLoader(parent);\n","export * from \"./glTFLoader\";\r\nexport * from \"./glTFLoaderExtension\";\r\nexport * from \"./glTFLoaderInterfaces\";\r\nexport * from \"./Extensions\";","import * as GLTF2 from \"babylonjs-gltf2interface\";\r\nimport { Nullable } from \"babylonjs/types\";\r\nimport { Observable, Observer } from \"babylonjs/Misc/observable\";\r\nimport { Tools } from \"babylonjs/Misc/tools\";\r\nimport { Camera } from \"babylonjs/Cameras/camera\";\r\nimport { AnimationGroup } from \"babylonjs/Animations/animationGroup\";\r\nimport { Skeleton } from \"babylonjs/Bones/skeleton\";\r\nimport { IParticleSystem } from \"babylonjs/Particles/IParticleSystem\";\r\nimport { BaseTexture } from \"babylonjs/Materials/Textures/baseTexture\";\r\nimport { Material } from \"babylonjs/Materials/material\";\r\nimport { AbstractMesh } from \"babylonjs/Meshes/abstractMesh\";\r\nimport { SceneLoader, ISceneLoaderPluginFactory, ISceneLoaderPlugin, ISceneLoaderPluginAsync, ISceneLoaderProgressEvent, ISceneLoaderPluginExtensions } from \"babylonjs/Loading/sceneLoader\";\r\nimport { AssetContainer } from \"babylonjs/assetContainer\";\r\nimport { Scene, IDisposable } from \"babylonjs/scene\";\r\nimport { WebRequest } from \"babylonjs/Misc/webRequest\";\r\nimport { IFileRequest } from \"babylonjs/Misc/fileRequest\";\r\nimport { Logger } from 'babylonjs/Misc/logger';\r\nimport { DataReader, IDataBuffer } from 'babylonjs/Misc/dataReader';\r\nimport { GLTFValidation } from './glTFValidation';\r\nimport { Light } from 'babylonjs/Lights/light';\r\nimport { TransformNode } from 'babylonjs/Meshes/transformNode';\r\nimport { RequestFileError } from 'babylonjs/Misc/fileTools';\r\nimport { StringTools } from 'babylonjs/Misc/stringTools';\r\n\r\ninterface IFileRequestInfo extends IFileRequest {\r\n _lengthComputable?: boolean;\r\n _loaded?: number;\r\n _total?: number;\r\n}\r\n\r\n/**\r\n * Mode that determines the coordinate system to use.\r\n */\r\nexport enum GLTFLoaderCoordinateSystemMode {\r\n /**\r\n * Automatically convert the glTF right-handed data to the appropriate system based on the current coordinate system mode of the scene.\r\n */\r\n AUTO,\r\n\r\n /**\r\n * Sets the useRightHandedSystem flag on the scene.\r\n */\r\n FORCE_RIGHT_HANDED,\r\n}\r\n\r\n/**\r\n * Mode that determines what animations will start.\r\n */\r\nexport enum GLTFLoaderAnimationStartMode {\r\n /**\r\n * No animation will start.\r\n */\r\n NONE,\r\n\r\n /**\r\n * The first animation will start.\r\n */\r\n FIRST,\r\n\r\n /**\r\n * All animations will start.\r\n */\r\n ALL,\r\n}\r\n\r\n/**\r\n * Interface that contains the data for the glTF asset.\r\n */\r\nexport interface IGLTFLoaderData {\r\n /**\r\n * The object that represents the glTF JSON.\r\n */\r\n json: Object;\r\n\r\n /**\r\n * The BIN chunk of a binary glTF.\r\n */\r\n bin: Nullable;\r\n}\r\n\r\n/**\r\n * Interface for extending the loader.\r\n */\r\nexport interface IGLTFLoaderExtension {\r\n /**\r\n * The name of this extension.\r\n */\r\n readonly name: string;\r\n\r\n /**\r\n * Defines whether this extension is enabled.\r\n */\r\n enabled: boolean;\r\n\r\n /**\r\n * Defines the order of this extension.\r\n * The loader sorts the extensions using these values when loading.\r\n */\r\n order?: number;\r\n}\r\n\r\n/**\r\n * Loader state.\r\n */\r\nexport enum GLTFLoaderState {\r\n /**\r\n * The asset is loading.\r\n */\r\n LOADING,\r\n\r\n /**\r\n * The asset is ready for rendering.\r\n */\r\n READY,\r\n\r\n /**\r\n * The asset is completely loaded.\r\n */\r\n COMPLETE\r\n}\r\n\r\n/** @hidden */\r\nexport interface IImportMeshAsyncOutput {\r\n meshes: AbstractMesh[];\r\n particleSystems: IParticleSystem[];\r\n skeletons: Skeleton[];\r\n animationGroups: AnimationGroup[];\r\n lights: Light[];\r\n transformNodes: TransformNode[];\r\n}\r\n\r\n/** @hidden */\r\nexport interface IGLTFLoader extends IDisposable {\r\n readonly state: Nullable;\r\n importMeshAsync: (meshesNames: any, scene: Scene, forAssetContainer: boolean, data: IGLTFLoaderData, rootUrl: string, onProgress?: (event: ISceneLoaderProgressEvent) => void, fileName?: string) => Promise;\r\n loadAsync: (scene: Scene, data: IGLTFLoaderData, rootUrl: string, onProgress?: (event: ISceneLoaderProgressEvent) => void, fileName?: string) => Promise;\r\n}\r\n\r\n/**\r\n * File loader for loading glTF files into a scene.\r\n */\r\nexport class GLTFFileLoader implements IDisposable, ISceneLoaderPluginAsync, ISceneLoaderPluginFactory {\r\n /** @hidden */\r\n public static _CreateGLTF1Loader: (parent: GLTFFileLoader) => IGLTFLoader;\r\n\r\n /** @hidden */\r\n public static _CreateGLTF2Loader: (parent: GLTFFileLoader) => IGLTFLoader;\r\n\r\n // --------------\r\n // Common options\r\n // --------------\r\n\r\n /**\r\n * Raised when the asset has been parsed\r\n */\r\n public onParsedObservable = new Observable();\r\n\r\n private _onParsedObserver: Nullable>;\r\n\r\n /**\r\n * Raised when the asset has been parsed\r\n */\r\n public set onParsed(callback: (loaderData: IGLTFLoaderData) => void) {\r\n if (this._onParsedObserver) {\r\n this.onParsedObservable.remove(this._onParsedObserver);\r\n }\r\n this._onParsedObserver = this.onParsedObservable.add(callback);\r\n }\r\n\r\n // ----------\r\n // V1 options\r\n // ----------\r\n\r\n /**\r\n * Set this property to false to disable incremental loading which delays the loader from calling the success callback until after loading the meshes and shaders.\r\n * Textures always loads asynchronously. For example, the success callback can compute the bounding information of the loaded meshes when incremental loading is disabled.\r\n * Defaults to true.\r\n * @hidden\r\n */\r\n public static IncrementalLoading = true;\r\n\r\n /**\r\n * Set this property to true in order to work with homogeneous coordinates, available with some converters and exporters.\r\n * Defaults to false. See https://en.wikipedia.org/wiki/Homogeneous_coordinates.\r\n * @hidden\r\n */\r\n public static HomogeneousCoordinates = false;\r\n\r\n // ----------\r\n // V2 options\r\n // ----------\r\n\r\n /**\r\n * The coordinate system mode. Defaults to AUTO.\r\n */\r\n public coordinateSystemMode = GLTFLoaderCoordinateSystemMode.AUTO;\r\n\r\n /**\r\n * The animation start mode. Defaults to FIRST.\r\n */\r\n public animationStartMode = GLTFLoaderAnimationStartMode.FIRST;\r\n\r\n /**\r\n * Defines if the loader should compile materials before raising the success callback. Defaults to false.\r\n */\r\n public compileMaterials = false;\r\n\r\n /**\r\n * Defines if the loader should also compile materials with clip planes. Defaults to false.\r\n */\r\n public useClipPlane = false;\r\n\r\n /**\r\n * Defines if the loader should compile shadow generators before raising the success callback. Defaults to false.\r\n */\r\n public compileShadowGenerators = false;\r\n\r\n /**\r\n * Defines if the Alpha blended materials are only applied as coverage.\r\n * If false, (default) The luminance of each pixel will reduce its opacity to simulate the behaviour of most physical materials.\r\n * If true, no extra effects are applied to transparent pixels.\r\n */\r\n public transparencyAsCoverage = false;\r\n\r\n /**\r\n * Defines if the loader should use range requests when load binary glTF files from HTTP.\r\n * Enabling will disable offline support and glTF validator.\r\n * Defaults to false.\r\n */\r\n public useRangeRequests = false;\r\n\r\n /**\r\n * Defines if the loader should create instances when multiple glTF nodes point to the same glTF mesh. Defaults to true.\r\n */\r\n public createInstances = true;\r\n\r\n /**\r\n * Defines if the loader should always compute the bounding boxes of meshes and not use the min/max values from the position accessor. Defaults to false.\r\n */\r\n public alwaysComputeBoundingBox = false;\r\n\r\n /**\r\n * If true, load all materials defined in the file, even if not used by any mesh. Defaults to false.\r\n */\r\n public loadAllMaterials = false;\r\n\r\n /**\r\n * Function called before loading a url referenced by the asset.\r\n */\r\n public preprocessUrlAsync = (url: string) => Promise.resolve(url);\r\n\r\n /**\r\n * Observable raised when the loader creates a mesh after parsing the glTF properties of the mesh.\r\n * Note that the observable is raised as soon as the mesh object is created, meaning some data may not have been setup yet for this mesh (vertex data, morph targets, material, ...)\r\n */\r\n public readonly onMeshLoadedObservable = new Observable();\r\n\r\n private _onMeshLoadedObserver: Nullable>;\r\n\r\n /**\r\n * Callback raised when the loader creates a mesh after parsing the glTF properties of the mesh.\r\n * Note that the callback is called as soon as the mesh object is created, meaning some data may not have been setup yet for this mesh (vertex data, morph targets, material, ...)\r\n */\r\n public set onMeshLoaded(callback: (mesh: AbstractMesh) => void) {\r\n if (this._onMeshLoadedObserver) {\r\n this.onMeshLoadedObservable.remove(this._onMeshLoadedObserver);\r\n }\r\n this._onMeshLoadedObserver = this.onMeshLoadedObservable.add(callback);\r\n }\r\n\r\n /**\r\n * Observable raised when the loader creates a texture after parsing the glTF properties of the texture.\r\n */\r\n public readonly onTextureLoadedObservable = new Observable();\r\n\r\n private _onTextureLoadedObserver: Nullable>;\r\n\r\n /**\r\n * Callback raised when the loader creates a texture after parsing the glTF properties of the texture.\r\n */\r\n public set onTextureLoaded(callback: (texture: BaseTexture) => void) {\r\n if (this._onTextureLoadedObserver) {\r\n this.onTextureLoadedObservable.remove(this._onTextureLoadedObserver);\r\n }\r\n this._onTextureLoadedObserver = this.onTextureLoadedObservable.add(callback);\r\n }\r\n\r\n /**\r\n * Observable raised when the loader creates a material after parsing the glTF properties of the material.\r\n */\r\n public readonly onMaterialLoadedObservable = new Observable();\r\n\r\n private _onMaterialLoadedObserver: Nullable>;\r\n\r\n /**\r\n * Callback raised when the loader creates a material after parsing the glTF properties of the material.\r\n */\r\n public set onMaterialLoaded(callback: (material: Material) => void) {\r\n if (this._onMaterialLoadedObserver) {\r\n this.onMaterialLoadedObservable.remove(this._onMaterialLoadedObserver);\r\n }\r\n this._onMaterialLoadedObserver = this.onMaterialLoadedObservable.add(callback);\r\n }\r\n\r\n /**\r\n * Observable raised when the loader creates a camera after parsing the glTF properties of the camera.\r\n */\r\n public readonly onCameraLoadedObservable = new Observable();\r\n\r\n private _onCameraLoadedObserver: Nullable>;\r\n\r\n /**\r\n * Callback raised when the loader creates a camera after parsing the glTF properties of the camera.\r\n */\r\n public set onCameraLoaded(callback: (camera: Camera) => void) {\r\n if (this._onCameraLoadedObserver) {\r\n this.onCameraLoadedObservable.remove(this._onCameraLoadedObserver);\r\n }\r\n this._onCameraLoadedObserver = this.onCameraLoadedObservable.add(callback);\r\n }\r\n\r\n /**\r\n * Observable raised when the asset is completely loaded, immediately before the loader is disposed.\r\n * For assets with LODs, raised when all of the LODs are complete.\r\n * For assets without LODs, raised when the model is complete, immediately after the loader resolves the returned promise.\r\n */\r\n public readonly onCompleteObservable = new Observable();\r\n\r\n private _onCompleteObserver: Nullable>;\r\n\r\n /**\r\n * Callback raised when the asset is completely loaded, immediately before the loader is disposed.\r\n * For assets with LODs, raised when all of the LODs are complete.\r\n * For assets without LODs, raised when the model is complete, immediately after the loader resolves the returned promise.\r\n */\r\n public set onComplete(callback: () => void) {\r\n if (this._onCompleteObserver) {\r\n this.onCompleteObservable.remove(this._onCompleteObserver);\r\n }\r\n this._onCompleteObserver = this.onCompleteObservable.add(callback);\r\n }\r\n\r\n /**\r\n * Observable raised when an error occurs.\r\n */\r\n public readonly onErrorObservable = new Observable();\r\n\r\n private _onErrorObserver: Nullable>;\r\n\r\n /**\r\n * Callback raised when an error occurs.\r\n */\r\n public set onError(callback: (reason: any) => void) {\r\n if (this._onErrorObserver) {\r\n this.onErrorObservable.remove(this._onErrorObserver);\r\n }\r\n this._onErrorObserver = this.onErrorObservable.add(callback);\r\n }\r\n\r\n /**\r\n * Observable raised after the loader is disposed.\r\n */\r\n public readonly onDisposeObservable = new Observable();\r\n\r\n private _onDisposeObserver: Nullable>;\r\n\r\n /**\r\n * Callback raised after the loader is disposed.\r\n */\r\n public set onDispose(callback: () => void) {\r\n if (this._onDisposeObserver) {\r\n this.onDisposeObservable.remove(this._onDisposeObserver);\r\n }\r\n this._onDisposeObserver = this.onDisposeObservable.add(callback);\r\n }\r\n\r\n /**\r\n * Observable raised after a loader extension is created.\r\n * Set additional options for a loader extension in this event.\r\n */\r\n public readonly onExtensionLoadedObservable = new Observable();\r\n\r\n private _onExtensionLoadedObserver: Nullable>;\r\n\r\n /**\r\n * Callback raised after a loader extension is created.\r\n */\r\n public set onExtensionLoaded(callback: (extension: IGLTFLoaderExtension) => void) {\r\n if (this._onExtensionLoadedObserver) {\r\n this.onExtensionLoadedObservable.remove(this._onExtensionLoadedObserver);\r\n }\r\n this._onExtensionLoadedObserver = this.onExtensionLoadedObservable.add(callback);\r\n }\r\n\r\n /**\r\n * Defines if the loader logging is enabled.\r\n */\r\n public get loggingEnabled(): boolean {\r\n return this._loggingEnabled;\r\n }\r\n\r\n public set loggingEnabled(value: boolean) {\r\n if (this._loggingEnabled === value) {\r\n return;\r\n }\r\n\r\n this._loggingEnabled = value;\r\n\r\n if (this._loggingEnabled) {\r\n this._log = this._logEnabled;\r\n }\r\n else {\r\n this._log = this._logDisabled;\r\n }\r\n }\r\n\r\n /**\r\n * Defines if the loader should capture performance counters.\r\n */\r\n public get capturePerformanceCounters(): boolean {\r\n return this._capturePerformanceCounters;\r\n }\r\n\r\n public set capturePerformanceCounters(value: boolean) {\r\n if (this._capturePerformanceCounters === value) {\r\n return;\r\n }\r\n\r\n this._capturePerformanceCounters = value;\r\n\r\n if (this._capturePerformanceCounters) {\r\n this._startPerformanceCounter = this._startPerformanceCounterEnabled;\r\n this._endPerformanceCounter = this._endPerformanceCounterEnabled;\r\n }\r\n else {\r\n this._startPerformanceCounter = this._startPerformanceCounterDisabled;\r\n this._endPerformanceCounter = this._endPerformanceCounterDisabled;\r\n }\r\n }\r\n\r\n /**\r\n * Defines if the loader should validate the asset.\r\n */\r\n public validate = false;\r\n\r\n /**\r\n * Observable raised after validation when validate is set to true. The event data is the result of the validation.\r\n */\r\n public readonly onValidatedObservable = new Observable();\r\n\r\n private _onValidatedObserver: Nullable>;\r\n\r\n /**\r\n * Callback raised after a loader extension is created.\r\n */\r\n public set onValidated(callback: (results: GLTF2.IGLTFValidationResults) => void) {\r\n if (this._onValidatedObserver) {\r\n this.onValidatedObservable.remove(this._onValidatedObserver);\r\n }\r\n this._onValidatedObserver = this.onValidatedObservable.add(callback);\r\n }\r\n\r\n private _loader: Nullable = null;\r\n private _progressCallback?: (event: ISceneLoaderProgressEvent) => void;\r\n private _requests = new Array();\r\n\r\n private static magicBase64Encoded = \"Z2xURg\"; // \"glTF\" base64 encoded (without the quotes!)\r\n\r\n /**\r\n * Name of the loader (\"gltf\")\r\n */\r\n public name = \"gltf\";\r\n\r\n /** @hidden */\r\n public extensions: ISceneLoaderPluginExtensions = {\r\n \".gltf\": { isBinary: false },\r\n \".glb\": { isBinary: true }\r\n };\r\n\r\n /**\r\n * Disposes the loader, releases resources during load, and cancels any outstanding requests.\r\n */\r\n public dispose(): void {\r\n if (this._loader) {\r\n this._loader.dispose();\r\n this._loader = null;\r\n }\r\n\r\n for (const request of this._requests) {\r\n request.abort();\r\n }\r\n\r\n this._requests.length = 0;\r\n\r\n delete this._progressCallback;\r\n\r\n this.preprocessUrlAsync = (url) => Promise.resolve(url);\r\n\r\n this.onMeshLoadedObservable.clear();\r\n this.onTextureLoadedObservable.clear();\r\n this.onMaterialLoadedObservable.clear();\r\n this.onCameraLoadedObservable.clear();\r\n this.onCompleteObservable.clear();\r\n this.onExtensionLoadedObservable.clear();\r\n\r\n this.onDisposeObservable.notifyObservers(undefined);\r\n this.onDisposeObservable.clear();\r\n }\r\n\r\n /** @hidden */\r\n public requestFile(scene: Scene, url: string, onSuccess: (data: any, request?: WebRequest) => void, onProgress?: (ev: ISceneLoaderProgressEvent) => void, useArrayBuffer?: boolean, onError?: (error: any) => void): IFileRequest {\r\n this._progressCallback = onProgress;\r\n\r\n if (useArrayBuffer) {\r\n if (this.useRangeRequests) {\r\n if (this.validate) {\r\n Logger.Warn(\"glTF validation is not supported when range requests are enabled\");\r\n }\r\n\r\n const fileRequest: IFileRequest = {\r\n abort: () => { },\r\n onCompleteObservable: new Observable()\r\n };\r\n\r\n const dataBuffer = {\r\n readAsync: (byteOffset: number, byteLength: number) => {\r\n return new Promise((resolve, reject) => {\r\n this._requestFile(url, scene, (data) => {\r\n resolve(new Uint8Array(data as ArrayBuffer));\r\n }, true, (error) => {\r\n reject(error);\r\n }, (webRequest) => {\r\n webRequest.setRequestHeader(\"Range\", `bytes=${byteOffset}-${byteOffset + byteLength - 1}`);\r\n });\r\n });\r\n },\r\n byteLength: 0\r\n };\r\n\r\n this._unpackBinaryAsync(new DataReader(dataBuffer)).then((loaderData) => {\r\n fileRequest.onCompleteObservable.notifyObservers(fileRequest);\r\n onSuccess(loaderData);\r\n }, onError);\r\n\r\n return fileRequest;\r\n }\r\n\r\n return this._requestFile(url, scene, (data, request) => {\r\n const arrayBuffer = data as ArrayBuffer;\r\n this._unpackBinaryAsync(new DataReader({\r\n readAsync: (byteOffset, byteLength) => Promise.resolve(new Uint8Array(arrayBuffer, byteOffset, byteLength)),\r\n byteLength: arrayBuffer.byteLength\r\n })).then((loaderData) => {\r\n onSuccess(loaderData, request);\r\n }, onError);\r\n }, true, onError);\r\n }\r\n\r\n return this._requestFile(url, scene, (data, request) => {\r\n this._validate(scene, data, Tools.GetFolderPath(url), Tools.GetFilename(url));\r\n onSuccess({ json: this._parseJson(data as string) }, request);\r\n }, useArrayBuffer, onError);\r\n }\r\n\r\n /** @hidden */\r\n public readFile(scene: Scene, file: File, onSuccess: (data: any) => void, onProgress?: (ev: ISceneLoaderProgressEvent) => any, useArrayBuffer?: boolean, onError?: (error: any) => void): IFileRequest {\r\n return scene._readFile(file, (data) => {\r\n this._validate(scene, data, \"file:\", file.name);\r\n if (useArrayBuffer) {\r\n const arrayBuffer = data as ArrayBuffer;\r\n this._unpackBinaryAsync(new DataReader({\r\n readAsync: (byteOffset, byteLength) => Promise.resolve(new Uint8Array(arrayBuffer, byteOffset, byteLength)),\r\n byteLength: arrayBuffer.byteLength\r\n })).then(onSuccess, onError);\r\n }\r\n else {\r\n onSuccess({ json: this._parseJson(data as string) });\r\n }\r\n }, onProgress, useArrayBuffer, onError);\r\n }\r\n\r\n /** @hidden */\r\n public importMeshAsync(meshesNames: any, scene: Scene, data: any, rootUrl: string, onProgress?: (event: ISceneLoaderProgressEvent) => void, fileName?: string): Promise<{ meshes: AbstractMesh[], particleSystems: IParticleSystem[], skeletons: Skeleton[], animationGroups: AnimationGroup[] }> {\r\n return Promise.resolve().then(() => {\r\n this.onParsedObservable.notifyObservers(data);\r\n this.onParsedObservable.clear();\r\n\r\n this._log(`Loading ${fileName || \"\"}`);\r\n this._loader = this._getLoader(data);\r\n return this._loader.importMeshAsync(meshesNames, scene, false, data, rootUrl, onProgress, fileName);\r\n });\r\n }\r\n\r\n /** @hidden */\r\n public loadAsync(scene: Scene, data: any, rootUrl: string, onProgress?: (event: ISceneLoaderProgressEvent) => void, fileName?: string): Promise {\r\n return Promise.resolve().then(() => {\r\n this.onParsedObservable.notifyObservers(data);\r\n this.onParsedObservable.clear();\r\n\r\n this._log(`Loading ${fileName || \"\"}`);\r\n this._loader = this._getLoader(data);\r\n return this._loader.loadAsync(scene, data, rootUrl, onProgress, fileName);\r\n });\r\n }\r\n\r\n /** @hidden */\r\n public loadAssetContainerAsync(scene: Scene, data: any, rootUrl: string, onProgress?: (event: ISceneLoaderProgressEvent) => void, fileName?: string): Promise {\r\n return Promise.resolve().then(() => {\r\n this.onParsedObservable.notifyObservers(data);\r\n this.onParsedObservable.clear();\r\n\r\n this._log(`Loading ${fileName || \"\"}`);\r\n this._loader = this._getLoader(data);\r\n\r\n // Prepare the asset container.\r\n const container = new AssetContainer(scene);\r\n\r\n // Get materials/textures when loading to add to container\r\n const materials: Array = [];\r\n this.onMaterialLoadedObservable.add((material) => {\r\n materials.push(material);\r\n material.onDisposeObservable.addOnce(() => {\r\n let index = container.materials.indexOf(material);\r\n if (index > -1) {\r\n container.materials.splice(index, 1);\r\n }\r\n index = materials.indexOf(material);\r\n if (index > -1) {\r\n materials.splice(index, 1);\r\n }\r\n });\r\n });\r\n const textures: Array = [];\r\n this.onTextureLoadedObservable.add((texture) => {\r\n textures.push(texture);\r\n texture.onDisposeObservable.addOnce(() => {\r\n let index = container.textures.indexOf(texture);\r\n if (index > -1) {\r\n container.textures.splice(index, 1);\r\n }\r\n index = textures.indexOf(texture);\r\n if (index > -1) {\r\n textures.splice(index, 1);\r\n }\r\n });\r\n });\r\n const cameras: Array = [];\r\n this.onCameraLoadedObservable.add((camera) => {\r\n cameras.push(camera);\r\n });\r\n\r\n return this._loader.importMeshAsync(null, scene, true, data, rootUrl, onProgress, fileName).then((result) => {\r\n Array.prototype.push.apply(container.meshes, result.meshes);\r\n Array.prototype.push.apply(container.particleSystems, result.particleSystems);\r\n Array.prototype.push.apply(container.skeletons, result.skeletons);\r\n Array.prototype.push.apply(container.animationGroups, result.animationGroups);\r\n Array.prototype.push.apply(container.materials, materials);\r\n Array.prototype.push.apply(container.textures, textures);\r\n Array.prototype.push.apply(container.lights, result.lights);\r\n Array.prototype.push.apply(container.transformNodes, result.transformNodes);\r\n Array.prototype.push.apply(container.cameras, cameras);\r\n return container;\r\n });\r\n });\r\n }\r\n\r\n /** @hidden */\r\n public canDirectLoad(data: string): boolean {\r\n return (data.indexOf(\"asset\") !== -1 && data.indexOf(\"version\") !== -1)\r\n || StringTools.StartsWith(data, \"data:base64,\" + GLTFFileLoader.magicBase64Encoded)\r\n || StringTools.StartsWith(data, \"data:application/octet-stream;base64,\" + GLTFFileLoader.magicBase64Encoded)\r\n || StringTools.StartsWith(data, \"data:model/gltf-binary;base64,\" + GLTFFileLoader.magicBase64Encoded);\r\n }\r\n\r\n /** @hidden */\r\n public directLoad(scene: Scene, data: string): Promise {\r\n if (StringTools.StartsWith(data, \"base64,\" + GLTFFileLoader.magicBase64Encoded) ||\r\n StringTools.StartsWith(data, \"application/octet-stream;base64,\" + GLTFFileLoader.magicBase64Encoded) ||\r\n StringTools.StartsWith(data, \"model/gltf-binary;base64,\" + GLTFFileLoader.magicBase64Encoded)) {\r\n const arrayBuffer = Tools.DecodeBase64(data);\r\n\r\n this._validate(scene, arrayBuffer);\r\n return this._unpackBinaryAsync(new DataReader({\r\n readAsync: (byteOffset, byteLength) => Promise.resolve(new Uint8Array(arrayBuffer, byteOffset, byteLength)),\r\n byteLength: arrayBuffer.byteLength\r\n }));\r\n }\r\n\r\n this._validate(scene, data);\r\n return Promise.resolve({ json: this._parseJson(data) });\r\n }\r\n\r\n /**\r\n * The callback that allows custom handling of the root url based on the response url.\r\n * @param rootUrl the original root url\r\n * @param responseURL the response url if available\r\n * @returns the new root url\r\n */\r\n public rewriteRootURL?(rootUrl: string, responseURL?: string): string;\r\n\r\n /** @hidden */\r\n public createPlugin(): ISceneLoaderPlugin | ISceneLoaderPluginAsync {\r\n return new GLTFFileLoader();\r\n }\r\n\r\n /**\r\n * The loader state or null if the loader is not active.\r\n */\r\n public get loaderState(): Nullable {\r\n return this._loader ? this._loader.state : null;\r\n }\r\n\r\n /**\r\n * Returns a promise that resolves when the asset is completely loaded.\r\n * @returns a promise that resolves when the asset is completely loaded.\r\n */\r\n public whenCompleteAsync(): Promise {\r\n return new Promise((resolve, reject) => {\r\n this.onCompleteObservable.addOnce(() => {\r\n resolve();\r\n });\r\n this.onErrorObservable.addOnce((reason) => {\r\n reject(reason);\r\n });\r\n });\r\n }\r\n\r\n /** @hidden */\r\n public _loadFile(url: string, scene: Scene, onSuccess: (data: string | ArrayBuffer) => void, useArrayBuffer?: boolean, onError?: (request?: WebRequest) => void): IFileRequest {\r\n const request = scene._loadFile(url, onSuccess, (event) => {\r\n this._onProgress(event, request);\r\n }, undefined, useArrayBuffer, onError) as IFileRequestInfo;\r\n request.onCompleteObservable.add((request) => {\r\n this._requests.splice(this._requests.indexOf(request), 1);\r\n });\r\n this._requests.push(request);\r\n return request;\r\n }\r\n\r\n /** @hidden */\r\n public _requestFile(url: string, scene: Scene, onSuccess: (data: string | ArrayBuffer, request?: WebRequest) => void, useArrayBuffer?: boolean, onError?: (error: RequestFileError) => void, onOpened?: (request: WebRequest) => void): IFileRequest {\r\n const request = scene._requestFile(url, onSuccess, (event) => {\r\n this._onProgress(event, request);\r\n }, undefined, useArrayBuffer, onError, onOpened) as IFileRequestInfo;\r\n request.onCompleteObservable.add((request) => {\r\n this._requests.splice(this._requests.indexOf(request), 1);\r\n });\r\n this._requests.push(request);\r\n return request;\r\n }\r\n\r\n private _onProgress(event: ProgressEvent, request: IFileRequestInfo): void {\r\n if (!this._progressCallback) {\r\n return;\r\n }\r\n\r\n request._lengthComputable = event.lengthComputable;\r\n request._loaded = event.loaded;\r\n request._total = event.total;\r\n\r\n let lengthComputable = true;\r\n let loaded = 0;\r\n let total = 0;\r\n for (let request of this._requests) {\r\n if (request._lengthComputable === undefined || request._loaded === undefined || request._total === undefined) {\r\n return;\r\n }\r\n\r\n lengthComputable = lengthComputable && request._lengthComputable;\r\n loaded += request._loaded;\r\n total += request._total;\r\n }\r\n\r\n this._progressCallback({\r\n lengthComputable: lengthComputable,\r\n loaded: loaded,\r\n total: lengthComputable ? total : 0\r\n });\r\n }\r\n\r\n private _validate(scene: Scene, data: string | ArrayBuffer, rootUrl = \"\", fileName = \"\"): void {\r\n if (!this.validate) {\r\n return;\r\n }\r\n\r\n this._startPerformanceCounter(\"Validate JSON\");\r\n GLTFValidation.ValidateAsync(data, rootUrl, fileName, (uri) => {\r\n return this.preprocessUrlAsync(rootUrl + uri).then((url) => (scene._loadFileAsync(url, undefined, true, true) as Promise));\r\n }).then((result) => {\r\n this._endPerformanceCounter(\"Validate JSON\");\r\n this.onValidatedObservable.notifyObservers(result);\r\n this.onValidatedObservable.clear();\r\n }, (reason) => {\r\n this._endPerformanceCounter(\"Validate JSON\");\r\n Tools.Warn(`Failed to validate: ${reason.message}`);\r\n this.onValidatedObservable.clear();\r\n });\r\n }\r\n\r\n private _getLoader(loaderData: IGLTFLoaderData): IGLTFLoader {\r\n const asset = (loaderData.json).asset || {};\r\n\r\n this._log(`Asset version: ${asset.version}`);\r\n asset.minVersion && this._log(`Asset minimum version: ${asset.minVersion}`);\r\n asset.generator && this._log(`Asset generator: ${asset.generator}`);\r\n\r\n const version = GLTFFileLoader._parseVersion(asset.version);\r\n if (!version) {\r\n throw new Error(\"Invalid version: \" + asset.version);\r\n }\r\n\r\n if (asset.minVersion !== undefined) {\r\n const minVersion = GLTFFileLoader._parseVersion(asset.minVersion);\r\n if (!minVersion) {\r\n throw new Error(\"Invalid minimum version: \" + asset.minVersion);\r\n }\r\n\r\n if (GLTFFileLoader._compareVersion(minVersion, { major: 2, minor: 0 }) > 0) {\r\n throw new Error(\"Incompatible minimum version: \" + asset.minVersion);\r\n }\r\n }\r\n\r\n const createLoaders: { [key: number]: (parent: GLTFFileLoader) => IGLTFLoader } = {\r\n 1: GLTFFileLoader._CreateGLTF1Loader,\r\n 2: GLTFFileLoader._CreateGLTF2Loader\r\n };\r\n\r\n const createLoader = createLoaders[version.major];\r\n if (!createLoader) {\r\n throw new Error(\"Unsupported version: \" + asset.version);\r\n }\r\n\r\n return createLoader(this);\r\n }\r\n\r\n private _parseJson(json: string): Object {\r\n this._startPerformanceCounter(\"Parse JSON\");\r\n this._log(`JSON length: ${json.length}`);\r\n const parsed = JSON.parse(json);\r\n this._endPerformanceCounter(\"Parse JSON\");\r\n return parsed;\r\n }\r\n\r\n private _unpackBinaryAsync(dataReader: DataReader): Promise {\r\n this._startPerformanceCounter(\"Unpack Binary\");\r\n\r\n // Read magic + version + length + json length + json format\r\n return dataReader.loadAsync(20).then(() => {\r\n const Binary = {\r\n Magic: 0x46546C67\r\n };\r\n\r\n const magic = dataReader.readUint32();\r\n if (magic !== Binary.Magic) {\r\n throw new Error(\"Unexpected magic: \" + magic);\r\n }\r\n\r\n const version = dataReader.readUint32();\r\n\r\n if (this.loggingEnabled) {\r\n this._log(`Binary version: ${version}`);\r\n }\r\n\r\n const length = dataReader.readUint32();\r\n if (dataReader.buffer.byteLength !== 0 && length !== dataReader.buffer.byteLength) {\r\n throw new Error(`Length in header does not match actual data length: ${length} != ${dataReader.buffer.byteLength}`);\r\n }\r\n\r\n let unpacked: Promise;\r\n switch (version) {\r\n case 1: {\r\n unpacked = this._unpackBinaryV1Async(dataReader, length);\r\n break;\r\n }\r\n case 2: {\r\n unpacked = this._unpackBinaryV2Async(dataReader, length);\r\n break;\r\n }\r\n default: {\r\n throw new Error(\"Unsupported version: \" + version);\r\n }\r\n }\r\n\r\n this._endPerformanceCounter(\"Unpack Binary\");\r\n\r\n return unpacked;\r\n });\r\n }\r\n\r\n private _unpackBinaryV1Async(dataReader: DataReader, length: number): Promise {\r\n const ContentFormat = {\r\n JSON: 0\r\n };\r\n\r\n const contentLength = dataReader.readUint32();\r\n const contentFormat = dataReader.readUint32();\r\n\r\n if (contentFormat !== ContentFormat.JSON) {\r\n throw new Error(`Unexpected content format: ${contentFormat}`);\r\n }\r\n\r\n const bodyLength = length - dataReader.byteOffset;\r\n\r\n const data: IGLTFLoaderData = { json: this._parseJson(dataReader.readString(contentLength)), bin: null };\r\n if (bodyLength !== 0) {\r\n const startByteOffset = dataReader.byteOffset;\r\n data.bin = {\r\n readAsync: (byteOffset, byteLength) => dataReader.buffer.readAsync(startByteOffset + byteOffset, byteLength),\r\n byteLength: bodyLength\r\n };\r\n }\r\n\r\n return Promise.resolve(data);\r\n }\r\n\r\n private _unpackBinaryV2Async(dataReader: DataReader, length: number): Promise {\r\n const ChunkFormat = {\r\n JSON: 0x4E4F534A,\r\n BIN: 0x004E4942\r\n };\r\n\r\n // Read the JSON chunk header.\r\n const chunkLength = dataReader.readUint32();\r\n const chunkFormat = dataReader.readUint32();\r\n if (chunkFormat !== ChunkFormat.JSON) {\r\n throw new Error(\"First chunk format is not JSON\");\r\n }\r\n\r\n // Bail if there are no other chunks.\r\n if (dataReader.byteOffset + chunkLength === length) {\r\n return dataReader.loadAsync(chunkLength).then(() => {\r\n return { json: this._parseJson(dataReader.readString(chunkLength)), bin: null };\r\n });\r\n }\r\n\r\n // Read the JSON chunk and the length and type of the next chunk.\r\n return dataReader.loadAsync(chunkLength + 8).then(() => {\r\n const data: IGLTFLoaderData = { json: this._parseJson(dataReader.readString(chunkLength)), bin: null };\r\n\r\n const readAsync = (): Promise => {\r\n const chunkLength = dataReader.readUint32();\r\n const chunkFormat = dataReader.readUint32();\r\n\r\n switch (chunkFormat) {\r\n case ChunkFormat.JSON: {\r\n throw new Error(\"Unexpected JSON chunk\");\r\n }\r\n case ChunkFormat.BIN: {\r\n const startByteOffset = dataReader.byteOffset;\r\n data.bin = {\r\n readAsync: (byteOffset, byteLength) => dataReader.buffer.readAsync(startByteOffset + byteOffset, byteLength),\r\n byteLength: chunkLength\r\n };\r\n dataReader.skipBytes(chunkLength);\r\n break;\r\n }\r\n default: {\r\n // ignore unrecognized chunkFormat\r\n dataReader.skipBytes(chunkLength);\r\n break;\r\n }\r\n }\r\n\r\n if (dataReader.byteOffset !== length) {\r\n return dataReader.loadAsync(8).then(readAsync);\r\n }\r\n\r\n return Promise.resolve(data);\r\n };\r\n\r\n return readAsync();\r\n });\r\n }\r\n\r\n private static _parseVersion(version: string): Nullable<{ major: number, minor: number }> {\r\n if (version === \"1.0\" || version === \"1.0.1\") {\r\n return {\r\n major: 1,\r\n minor: 0\r\n };\r\n }\r\n\r\n const match = (version + \"\").match(/^(\\d+)\\.(\\d+)/);\r\n if (!match) {\r\n return null;\r\n }\r\n\r\n return {\r\n major: parseInt(match[1]),\r\n minor: parseInt(match[2])\r\n };\r\n }\r\n\r\n private static _compareVersion(a: { major: number, minor: number }, b: { major: number, minor: number }): number {\r\n if (a.major > b.major) { return 1; }\r\n if (a.major < b.major) { return -1; }\r\n if (a.minor > b.minor) { return 1; }\r\n if (a.minor < b.minor) { return -1; }\r\n return 0;\r\n }\r\n\r\n private static readonly _logSpaces = \" \";\r\n private _logIndentLevel = 0;\r\n private _loggingEnabled = false;\r\n\r\n /** @hidden */\r\n public _log = this._logDisabled;\r\n\r\n /** @hidden */\r\n public _logOpen(message: string): void {\r\n this._log(message);\r\n this._logIndentLevel++;\r\n }\r\n\r\n /** @hidden */\r\n public _logClose(): void {\r\n --this._logIndentLevel;\r\n }\r\n\r\n private _logEnabled(message: string): void {\r\n const spaces = GLTFFileLoader._logSpaces.substr(0, this._logIndentLevel * 2);\r\n Logger.Log(`${spaces}${message}`);\r\n }\r\n\r\n private _logDisabled(message: string): void {\r\n }\r\n\r\n private _capturePerformanceCounters = false;\r\n\r\n /** @hidden */\r\n public _startPerformanceCounter = this._startPerformanceCounterDisabled;\r\n\r\n /** @hidden */\r\n public _endPerformanceCounter = this._endPerformanceCounterDisabled;\r\n\r\n private _startPerformanceCounterEnabled(counterName: string): void {\r\n Tools.StartPerformanceCounter(counterName);\r\n }\r\n\r\n private _startPerformanceCounterDisabled(counterName: string): void {\r\n }\r\n\r\n private _endPerformanceCounterEnabled(counterName: string): void {\r\n Tools.EndPerformanceCounter(counterName);\r\n }\r\n\r\n private _endPerformanceCounterDisabled(counterName: string): void {\r\n }\r\n}\r\n\r\nif (SceneLoader) {\r\n SceneLoader.RegisterPlugin(new GLTFFileLoader());\r\n}\r\n","import * as GLTF2 from 'babylonjs-gltf2interface';\r\nimport { Tools } from 'babylonjs/Misc/tools';\r\n\r\ndeclare var GLTFValidator: GLTF2.IGLTFValidator;\r\n\r\n// WorkerGlobalScope\r\ndeclare function importScripts(...urls: string[]): void;\r\ndeclare function postMessage(message: any, transfer?: any[]): void;\r\n\r\nfunction validateAsync(data: string | ArrayBuffer, rootUrl: string, fileName: string, getExternalResource: (uri: string) => Promise): Promise {\r\n const options: GLTF2.IGLTFValidationOptions = {\r\n externalResourceFunction: (uri) => getExternalResource(uri).then((value) => new Uint8Array(value))\r\n };\r\n\r\n if (fileName) {\r\n options.uri = (rootUrl === \"file:\" ? fileName : rootUrl + fileName);\r\n }\r\n\r\n return (data instanceof ArrayBuffer)\r\n ? GLTFValidator.validateBytes(new Uint8Array(data), options)\r\n : GLTFValidator.validateString(data, options);\r\n}\r\n\r\n/**\r\n * The worker function that gets converted to a blob url to pass into a worker.\r\n */\r\nfunction workerFunc(): void {\r\n const pendingExternalResources: Array<{ resolve: (data: any) => void, reject: (reason: any) => void }> = [];\r\n\r\n onmessage = (message) => {\r\n const data = message.data;\r\n switch (data.id) {\r\n case \"init\": {\r\n importScripts(data.url);\r\n break;\r\n }\r\n case \"validate\": {\r\n validateAsync(data.data, data.rootUrl, data.fileName, (uri) => new Promise((resolve, reject) => {\r\n const index = pendingExternalResources.length;\r\n pendingExternalResources.push({ resolve, reject });\r\n postMessage({ id: \"getExternalResource\", index: index, uri: uri });\r\n })).then((value) => {\r\n postMessage({ id: \"validate.resolve\", value: value });\r\n }, (reason) => {\r\n postMessage({ id: \"validate.reject\", reason: reason });\r\n });\r\n break;\r\n }\r\n case \"getExternalResource.resolve\": {\r\n pendingExternalResources[data.index].resolve(data.value);\r\n break;\r\n }\r\n case \"getExternalResource.reject\": {\r\n pendingExternalResources[data.index].reject(data.reason);\r\n break;\r\n }\r\n }\r\n };\r\n}\r\n\r\n/**\r\n * Configuration for glTF validation\r\n */\r\nexport interface IGLTFValidationConfiguration {\r\n /**\r\n * The url of the glTF validator.\r\n */\r\n url: string;\r\n}\r\n\r\n/**\r\n * glTF validation\r\n */\r\nexport class GLTFValidation {\r\n /**\r\n * The configuration. Defaults to `{ url: \"https://preview.babylonjs.com/gltf_validator.js\" }`.\r\n */\r\n public static Configuration: IGLTFValidationConfiguration = {\r\n url: \"https://preview.babylonjs.com/gltf_validator.js\"\r\n };\r\n\r\n private static _LoadScriptPromise: Promise;\r\n\r\n /**\r\n * Validate a glTF asset using the glTF-Validator.\r\n * @param data The JSON of a glTF or the array buffer of a binary glTF\r\n * @param rootUrl The root url for the glTF\r\n * @param fileName The file name for the glTF\r\n * @param getExternalResource The callback to get external resources for the glTF validator\r\n * @returns A promise that resolves with the glTF validation results once complete\r\n */\r\n public static ValidateAsync(data: string | ArrayBuffer, rootUrl: string, fileName: string, getExternalResource: (uri: string) => Promise): Promise\r\n {\r\n if (typeof Worker === \"function\") {\r\n return new Promise((resolve, reject) => {\r\n const workerContent = `${validateAsync}(${workerFunc})()`;\r\n const workerBlobUrl = URL.createObjectURL(new Blob([workerContent], { type: \"application/javascript\" }));\r\n const worker = new Worker(workerBlobUrl);\r\n\r\n const onError = (error: ErrorEvent) => {\r\n worker.removeEventListener(\"error\", onError);\r\n worker.removeEventListener(\"message\", onMessage);\r\n reject(error);\r\n };\r\n\r\n const onMessage = (message: MessageEvent) => {\r\n const data = message.data;\r\n switch (data.id) {\r\n case \"getExternalResource\": {\r\n getExternalResource(data.uri).then((value) => {\r\n worker.postMessage({ id: \"getExternalResource.resolve\", index: data.index, value: value }, [value]);\r\n }, (reason) => {\r\n worker.postMessage({ id: \"getExternalResource.reject\", index: data.index, reason: reason });\r\n });\r\n break;\r\n }\r\n case \"validate.resolve\": {\r\n worker.removeEventListener(\"error\", onError);\r\n worker.removeEventListener(\"message\", onMessage);\r\n resolve(data.value);\r\n break;\r\n }\r\n case \"validate.reject\": {\r\n worker.removeEventListener(\"error\", onError);\r\n worker.removeEventListener(\"message\", onMessage);\r\n reject(data.reason);\r\n }\r\n }\r\n };\r\n\r\n worker.addEventListener(\"error\", onError);\r\n worker.addEventListener(\"message\", onMessage);\r\n\r\n worker.postMessage({ id: \"init\", url: Tools.GetAbsoluteUrl(this.Configuration.url) });\r\n worker.postMessage({ id: \"validate\", data: data, rootUrl: rootUrl, fileName: fileName });\r\n });\r\n }\r\n else {\r\n if (!this._LoadScriptPromise) {\r\n this._LoadScriptPromise = Tools.LoadScriptAsync(this.Configuration.url);\r\n }\r\n\r\n return this._LoadScriptPromise.then(() => {\r\n return validateAsync(data, rootUrl, fileName, getExternalResource);\r\n });\r\n }\r\n }\r\n}\r\n","export * from \"./glTFFileLoader\";\r\nexport * from \"./glTFValidation\";\r\nimport * as GLTF1 from \"./1.0\";\r\nimport * as GLTF2 from \"./2.0\";\r\nexport {\r\n GLTF1,\r\n GLTF2\r\n};\r\n","export * from \"./glTF\";\r\nexport * from \"./OBJ\";\r\nexport * from \"./STL\";","import * as FileLoader from \"../glTF/glTFFileLoader\";\r\nimport * as Validation from \"../glTF/glTFValidation\";\r\n\r\n/**\r\n * This is the entry point for the UMD module.\r\n * The entry point for a future ESM package should be index.ts\r\n */\r\nvar globalObject = (typeof global !== 'undefined') ? global : ((typeof window !== 'undefined') ? window : undefined);\r\nif (typeof globalObject !== \"undefined\") {\r\n (globalObject).BABYLON = (globalObject).BABYLON || {};\r\n for (var key in FileLoader) {\r\n (globalObject).BABYLON[key] = (FileLoader)[key];\r\n }\r\n for (var key in Validation) {\r\n (globalObject).BABYLON[key] = (Validation)[key];\r\n }\r\n}\r\n\r\nexport * from \"../glTF/glTFFileLoader\";\r\nexport * from \"../glTF/glTFValidation\";","import * as GLTF1 from \"../glTF/1.0\";\r\n\r\n/**\r\n * This is the entry point for the UMD module.\r\n * The entry point for a future ESM package should be index.ts\r\n */\r\nvar globalObject = (typeof global !== 'undefined') ? global : ((typeof window !== 'undefined') ? window : undefined);\r\nif (typeof globalObject !== \"undefined\") {\r\n (globalObject).BABYLON = (globalObject).BABYLON || {};\r\n (globalObject).BABYLON.GLTF1 = (globalObject).BABYLON.GLTF1 || {};\r\n for (var key in GLTF1) {\r\n (globalObject).BABYLON.GLTF1[key] = (GLTF1)[key];\r\n }\r\n}\r\n\r\nexport { GLTF1 };","import * as Extensions from \"../glTF/2.0/Extensions\";\r\nimport * as Interfaces from \"../glTF/2.0/glTFLoaderInterfaces\";\r\nimport * as GLTF2 from \"../glTF/2.0\";\r\n\r\n/**\r\n * This is the entry point for the UMD module.\r\n * The entry point for a future ESM package should be index.ts\r\n */\r\nvar globalObject = (typeof global !== 'undefined') ? global : ((typeof window !== 'undefined') ? window : undefined);\r\nif (typeof globalObject !== \"undefined\") {\r\n (globalObject).BABYLON = (globalObject).BABYLON || {};\r\n var BABYLON = (globalObject).BABYLON;\r\n BABYLON.GLTF2 = BABYLON.GLTF2 || {};\r\n BABYLON.GLTF2.Loader = BABYLON.GLTF2.Loader || {};\r\n BABYLON.GLTF2.Loader.Extensions = BABYLON.GLTF2.Loader.Extensions || {};\r\n\r\n const keys = [];\r\n for (var key in Extensions) {\r\n BABYLON.GLTF2.Loader.Extensions[key] = (Extensions)[key];\r\n keys.push(key);\r\n }\r\n for (var key in Interfaces) {\r\n BABYLON.GLTF2.Loader[key] = (Interfaces)[key];\r\n keys.push(key);\r\n }\r\n\r\n for (var key in GLTF2) {\r\n // Prevent Reassignment.\r\n if (keys.indexOf(key) > -1) {\r\n continue;\r\n }\r\n\r\n BABYLON.GLTF2[key] = (GLTF2)[key];\r\n }\r\n}\r\n\r\nexport { GLTF2 };","import * as Loaders from \"../OBJ\";\r\n\r\n/**\r\n * This is the entry point for the UMD module.\r\n * The entry point for a future ESM package should be index.ts\r\n */\r\nvar globalObject = (typeof global !== 'undefined') ? global : ((typeof window !== 'undefined') ? window : undefined);\r\nif (typeof globalObject !== \"undefined\") {\r\n for (var key in Loaders) {\r\n (globalObject).BABYLON[key] = (Loaders)[key];\r\n }\r\n}\r\n\r\nexport * from \"../OBJ\";","import * as Loaders from \"../STL\";\r\n\r\n/**\r\n * This is the entry point for the UMD module.\r\n * The entry point for a future ESM package should be index.ts\r\n */\r\nvar globalObject = (typeof global !== 'undefined') ? global : ((typeof window !== 'undefined') ? window : undefined);\r\nif (typeof globalObject !== \"undefined\") {\r\n for (var key in Loaders) {\r\n (globalObject).BABYLON[key] = (Loaders)[key];\r\n }\r\n}\r\n\r\nexport * from \"../STL\";","import \"../index\";\r\nexport * from \"./legacy-glTF\";\r\nexport * from \"./legacy-glTF1\";\r\nexport * from \"./legacy-glTF2\";\r\nexport * from \"./legacy-objFileLoader\";\r\nexport * from \"./legacy-stlFileLoader\";","module.exports = __WEBPACK_EXTERNAL_MODULE_babylonjs_Misc_tools__;"],"sourceRoot":""}